신입 개발자 공부 과정

1월1일~1월2일 C# 공부한 부분들 본문

C#/모르는 내용들 공부

1월1일~1월2일 C# 공부한 부분들

Lewisjkim 2021. 12. 29. 18:52

아는 것들

공부해야될것들

-----------------

01.Introduction

02.Hello, World!

03.코드작성시 주의사항

04.Main 메서드

05.변수와 값

06.데이터 타입 int, float, string

07.데이터 타입 bool, char, object

08.주석

09.컴파일과 빌드

10.오류와 디버깅

11.var키워드

 -obj와 var의 차이?

12.상수 const - 변하지 않는 값

13.열거형식 enum

14.형식 변환

15.문자열 보간

16.값형식, 참조형식

 

-stack: 나중에 넣은 데이터를 가장 먼저 꺼내는 구조    

ex) int, float, char, bool, enum. //스택에 값이 직접 저장되는 형식: 값형식

 

-hip: 임의적 순서로 저장

ex) string, object. //힙에 값이 저장되는 형식: 참조형식

                                 //참조형식의 값의 주소는 스택에 저장된다(?)

출처: Youtube // 눈코딩

null: 개체를 참조하지 않는 null 참조를 나타내는 리터럴 = 아무것도 참조하지 않는 값

즉, 참조 형식 변수의 기본값

리터럴: 소스 코드의 고정된 값(?) 

 

17.박싱, 언박싱

boxing= 값 형식을 object형식으로 변환하는 과정 object o = (값 형식) n

 

object형식이란? 

C#에서 사용하는 모든 데이터를 저장하고 모든 데이터 형식을 담을 수 있다.

 

박싱은 값은 내부에 래핑하고 힙에 저장된다.

값 형식을 박싱하면 힙에 저장 된다.

boxing은 암시적 ex)object obj = i;

unboxing은 명시적ex)object obj = (obj)i;

unboxing을 cast 또는 casting 으로도 표현합니다.

언박싱이 4배 더 오래 걸릴 수 있다.

int i =123;
object obj = i //암시적 박싱
object obj =(object)i;//명식적 박싱

//언박싱(언박싱은 명시적이어야한다)
int j = (int)obj;

Console.WriteLine(i);
Console.WriteLine(obj);
Console.WriteLine(j);

//output will be
//123
//123
//123

 

18.입력받기

buffer(버퍼)=

데이터를 A에서 B로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리 영역

 

stream(스트림)=

데이터가 순서대로 전송되도록 보장해주는 데이터의 흐름

 

Console.ReadLine()=

입력이 종료 되면 문자열 값을 보내 줍니다.

Console.ReadKey()=

문자하나 입력 받고 종료

Console.Read()=

문자열을 입력 받고 입력을 종료 하려면 Enter

문자열을 입력하면 첫번째 문자를 정수 형식 값으로 보내 준다.

 

글씨로 출력하고싶으면

ConsoleKeyInfo keyInfo = Console.ReadKey();
Console.WriteLine(keyInfo.KeyChar);

 

열거형식 ConsoleKey 값으로 출력하고 싶다면

 

ConsoleKeyInfo keyInfo = Console.ReadKey();
Console.WriteLine(keyInfo.Key);

.Net 이란?

닷넷 프레임워크(.NET Framework)는 마이크로소프트사에서 제공하는 윈도우 프로그램 개발 및 실행환경

NET의 특징은 CLS(닷넷 프레임워크의 언어가 반드시 지켜야하는 언어 스펙)을 따르는 언어라면 어떠한 언어라도 닷넷 프레임워크에서 실행가능

CLR이라는 가상기계 위에서 작동하기 때문에 플랫폼에 독립적이며 궁극적으로 프로그래머가 코딩(특히 윈도우 프로그램)을 하는데 더 편한 환경을 제공해줍니다. [출처= 코딩 팩토리]

 

19.산술연산자

 

20.비교연산자

 

21.논리연산자

&& and

|| or

! not

 

22.선택문 if문

if

if-else

else if

 

23.선택문 switch문

switch(char, 문자열, 부울, 정수 및 숫자형식 or 열거형)

case(only 상수식=변하지 않는 값)

switch("hong")//표현식
{
 case "hong":
	Console.WriteLine("hong");
    break; //switch문 나가기
 default:
 	Console.WriteLine("Who are you?");
    break;
}

enum을 사용하면

enum Season
{
	None,
    Spring,
    Summer,
    Autumn,
    Winter
}
------
Season favorite = Season.Summer; //favorite에 Season.Summer를 announce하면
switch(favorite)
{
	case Seasons.Spring:
    	Console.WriteLine("봄이여");
        break;
    case Seasons.Summer:
    	Console.WriteLine("여름이여");
        break;
    case Seasons.Autumn:
    	Console.WriteLine("가을이여");
        break;
    case Seasons.Winter:
    	Console.WriteLine("겨울이여");
        break;
    deafault
    	Console.WriteLine("뭐시여?");
        break;
}

 

 

24.반복문 for문

for문

 

25.반복문 while문

 

26.break문, continue문

break문= 가장 가까운 바깥쪽 루프 or switch문을 종료

continue문=루프 끝까지 실행하지 않는다

 

27.메서드 정의및 호출

메서드는 일련의 문(?)을 포함하는 코드 블록이다

특정 작업을 수행하기 위한 일련의 명령문이 포함되고

클래스 내부에서 선언 및 정의되어야 한다.

 

문법(syntax)

접근자 반환타입 메서드이름()

{

}

 

메서드 정의= 

1.어떤 기능을 실행 할지 생각

2.동사로 시작하는 첫문자 대문자로 짓기

public void SayHello() //반환할 값이 없으므로 반환타입을 void로 해준다
{
	//명령문
}

 

28.메서드 매개변수

매개변수=

외부로부터 들어오는 값을 저장하는 변수

메서드 내부에서는 = 매개변수

외부에서는 = 인자 or 인수 라고 부른다

 

29.메서드 반환타입, return

값을 반환하는 매서드는

반환 값을 변수에 할당 할 수 있다.

ex)

float GetPi();
{
	return 3.14f;
}

float pi = GetPI();

 

30.클래스, new 연산자

클래스는 사용자 정의 형식

객체(값=인스턴스/object)를 생성하기 위해 변수와 메서드를 정의하는

객체=메모리에 저장된 값, 고유한 속성을 가지며 클래스에서 정의한 기능을 수행할 수 있다

 

클래스 정의=

class Car
{

}

 

자동차 이름 정하기//클래스 속성

class Car
{
	string name;
}

 

자동차의 기능 정의//매서드

-정면으로 이동 한다

class Car
{
	string name;
    
    void MoveForward()
    {
    
    }
}

 

자동차 객체 만드려면 new 키워드 사용하기

그리고자동차 객체 이름 설정하기

class Car
{
	private string name; //속성, 필드, 멤버 변수
    
    private void MoveForward()
    {
    	Console.WriteLine("{0}이 전진 합니다.", name);
    }
}

//-----------------

Car car = new Car(); //자동차 객체 생성
car.name = "싼타페" //자동차 객체 이름 성정
Console.WriteLine(car.name); // 자동차 객체 이름 출력

 

자동차 객체 움직이기//점 연산자를 사용해서 속성 또는 매서드 호출

car.MoveForward();

 

클래스를 파일로 생성하기=

Ctrl+Shift+A

 

 

 

31.생성자 메서드

특수한 메서드로 해당 클래스의 이름과 동일하다

반환형식은 포함되지 않는다

 

매개변수가 있는 생성자 메서드 정의=

class Car
{
	string name;//맴버 변수

	void Car(string carName)//매개 변수를 입력
    {
    
    }
}

매개변수 있는 생성자 객체 생성하기=

Car car = new Car("싼타페");//싼타페라는 매개 변수 값을 가진 변수타입 Car의 변수 car의 객체가 생성


//--------------------------

class Car
{
	string name;//맴버 변수

	void Car(string carName)//매개 변수를 입력, 
    {
    	name = carName;//객체를 생성할 때 받은 매개 변수의 값을 맴버 변수 name에 옮겨 담는다
        			   //이유는 생성자 호출이 끝나면 매개변수의 값은 사라지기 때문
    }
}

 

32.맴버, 지역변수

맴버 변수는 인스턴스(객체)가 메모리에 있는 동안 접근 가능

class Car
{
	string name; // 맴버변수
}

지역 변수는 메서드에 정의된 변수

메서드가 실행되는 동안 접근 가능

 

인스턴스에 대한 참조가 없으면

가비지 컬렉션에 의해 자동으로 제거된다

가비지 컬렉션= 메모리를 자동으로 관리해주는 메커니즘

class Car
{
	string name; // 맴버변수
    
    void Move(int moveSpeed)//지역변수(매개변수) moveSpeed
    {
    	float limitSpeed = 5f;//limitSpeed 지역변수
    }
}

 

33.점 연산자와 NullReferenceException

 

NullReferenceException= 아무것도 참조하고 있지 않는 참조 변수에서 맴버에 액세스 하려고 할때 생김

Exception= 오류

 

 

34.this 키워드

클래스의 현재 인스턴스를 가리키는 키워드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            Character hong = new Character("hong", 3, 10);//객체 홍 생성
            Character lim = new Character("lim", 2, 12);//객체 임 생성
            //현재 상태표 표시
            Console.WriteLine("name:{0}, damage:{1}, hp:{2}/{3}", hong.name, hong.damage, hong.hp, hong.maxHp);
            Console.WriteLine("name:{0}, damage:{1}, hp:{2}/{3}", lim.name, lim.damage, lim.hp, lim.maxHp);
			//공격신호
            hong.Attack(lim);
            lim.Attack(hong);
            //현재 상태표 표시
            Console.WriteLine("name:{0}, damage:{1}, hp:{2}/{3}", hong.name, hong.damage, hong.hp, hong.maxHp);
            Console.WriteLine("name:{0}, damage:{1}, hp:{2}/{3}", lim.name, lim.damage, lim.hp, lim.maxHp);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Practice
{
    class Character
    {
        public string name;
        public int damage;
        public int hp;
        public int maxHp;

        public Character(string name, int damage, int maxHp)
        {
            this.name = name; // 맴버변수 string name을 지정
            this.damage = damage;
            this.maxHp = maxHp;
            this.hp = this.maxHp;

        }
        public void Attack(Character target)
        {
            Console.WriteLine("{0}이(가) {1}을(를) 공격합니다", this.name, target.name);
            target.Hit(this.damage);
        }

        public void Hit(int damage)
        {
            Console.WriteLine("{0}이(가) {1}에게 공격받았습니다", this.name, damage);
            this.hp -= damage;
        }
    }
}

output:

 

35.static 한정자

특정 개체가 아니라 형식 자체에 속하는 정적 맴버를 정의 할 수 있다정적 맴버는 프로그램이 실행되는 동안 수명이 유지되며 항상 클래스 이름으로 엑세스(접근)된다생성된 인스턴스의 수와 상관 없이 정적 맴버는 항상 한개만 있다정적 메서드는 비정적 필드 및 메서드에 엑세스 할 수 없다

class Program
{
	int a;
    
    static void Main(string[] args)
    {
    	(x)a = 10; //정적 메서드는 비정적 필드에 있는 int a에 접근 불가
        (x)Test(); //정적 메서드는 비정적 메서드 Test()에 접근 불가
    }
    
    void Test()
    {
    }
}
class Program
{
	static int a;
    
    static void Main(string[] args)
    {
    	Program.a = 10; 
        Program.Test(); 
    }
    
    static void Test()
    {
    }
}

 

정적변수의 정의=

앞에 static을 붙혀준다

class CallCenter
{
	static string number = "1588-0000";
}

 

정적 맴버에 접근=

클래스 이름으로 접근 해야한다

class Program
{
	static void Main(string[] args)
    {
    	Console.WriteLine(CallCenter.number);//
        Callcenter.Call();
    }
}

 

정적 생성자=

사용하는곳: 정적 필드를 초기화 하거나 특정 작업을 한번만 수행 해야 하는 데 사용

생성자를 만들 때 엑세스 한정자(ex)public, private...을 사용할 수 없다

생성자에 매개변수를 정의 할 수 없다

인스턴스 생성자보다 먼저 호출되며 한번만 실행 된다

Class CallCenter
{
	public static string number;
    
    //생성자
    static CallCenter()
    {
    	CallCenter.number = "1588-0000";
    }
}

 

36.메서드 오버로딩

37-1.상속, protected

   37-2. virtual, override, base

   37-3. 생성자 연결

38.업캐스팅 다운캐스팅

39.구조체

40.추상클래스

41.인터페이스

42.속성과 개체이니셜라이져

43.1차원 배열

44.다차원 배열과 가변배열

45.반복문 - foreach

46.namespace과 using지시문

47.ArrayList

48.Stack

49.Queue

50.Hashtable

51.인덱서

52.일반화 프로그래밍

53.List

54.Dictionaray

55.HashSet

56.LinkedList

57.예외처리

58.대리자

59.멀티캐스트 대리자

60.이벤트

61.Action

62.Func

63.Predicate

64.Comparison

65.무명메서드

66.람다식

67.반복기와 yield

68.LINQ

69.파일 읽기

70.파일 쓰기

71.스레드

72.비동기 프로그래밍

'C# > 모르는 내용들 공부' 카테고리의 다른 글

c# 화살표 함수 =>  (0) 2022.01.13
c# 재귀함수  (0) 2022.01.13
C# Callback ,Json 공부  (0) 2022.01.05
1월3~4일 추가로 공부한 것  (0) 2022.01.04
12/28 모르는 부분들 C# 구조체Struct, 배열Array  (0) 2021.12.29