언어/C# 5

객체지향의 3대 속성 [은닉성, 상속성, 다형성]

상속 데이터를 효율적으로 관리하기 위해 사용한다. class 사람{ } 이렇게 사람에 대한 class를 만들어서 그 기능을 넣는다고 한다면 class 학생 : 사람 { } 으로 사람에 넣었던 필드와 함수들을 학생class 안에서도 사용할 수 있다. 코드의 흐름은 부모의 class에 있는 필드와 메소드를 읽어들인 후 자식class를 실행한다. 따라서 부모와 자식의 class에 각각 생성자가 있다면 부모의 생성자 먼저 호출된 후 자식의 생성자가 호출된다. 부모의 오버로딩된 생성자들은 자식의 생성자에서 호출 가능한데, 자식 생성자 옆에 : base() 를 사용하여 base안에 원하는 매개변수를 집어넣는 것으로 호출할 수 있다. 지금까지는 생성자에서 자신의 필드에 접근할 때 this 키워드를 사용하여 접근했었다..

언어/C# 2023.09.29

c# 잡지식

생성자 더보기 생성자는 각 객체의 필드 초기화를 담당한다고 볼 수 있다. 선언은 클래스이름(){ } 으로, 반환형식이 없다. 또한 오버로딩으로 여러 타입의 생성자를 동시에 만들고, 원하는 경우의 생성자를 사용할 수 있다. (이 경우 생성자는 선택된 하나의 경우만 실행된다.) 매개변수에 아무것도 받지 않는다면 정해둔 값으로 항상 초기화 되겠지만 매개변수를 받는 경우 생성자의 초기화에서 주로 this.필드 의 형식을 사용한다. 주로 사용하진 않지만 public int a; public int b; public ClassName() { a = 10; b = 15; } public ClassName(int a) : this() // 또는 this(a) { this.a = a; } 이렇게 생성자 뒤에 : this..

언어/C# 2023.09.28

스택과 힙 메모리에는 각각 어떤 코드가 저장될까?

같은 class로 서로 다른 객체를 만들어 줄 때마다 class 안에 있는 필드들을 다르게 설정하고 싶을 때 new를 이용하여 생성해주고 다시 직접 초기화하는 작업을 반복 그럴바에 class 내부에 그 class타입의 함수를 만들어서 그 안에 객체를 생성하면 된다. class Knight { public int hp; public int attack; public Knight Clone() { Knight knight2 = new Knight(); knight2.hp = this.hp; knight2.attack = this.attack; return knight2; } } 이렇게 같은 클래스에서 서로 다른 클론들을 생성하는 것을 딥 카피라고 한다. stack에는 잠깐 계산할 때만 필요한 임시값을 저장할..

언어/C# 2023.09.28

ref, out

일반적으로 우리는 함수를 이용할 때 함수의 연산 이후 함수의 body부분에서 값을 return하고, 함수를 호출한 부분에서 그 return된 값을 따로 저장하여 사용하였다. 함수 내부의 연산은 호출이 끝나고 나면 기억되지 않지만, 함수가 끝나기 전에 return에 연산한 값을 복사하여 결과를 반환하는 방식이다. 하지만 return하여 따로 저장하기보다 값 그 자체에 접근하여 연산해야 할 필요가 있는 경우 어떻게 해야할까? ref 는 매개변수 안의 값을 복사하여 계산하는 것이 아닌 값 주소를 참조하여 계산한다. 때문에 함수를 벗어나도 매개변수 안의 값 또한 함수의 연산이 적용되어 함수 밖으로 빠져나온다. static void swap(ref int a, ref int b) { int temp = a; a ..

언어/C# 2023.09.28

열거형

switch문에서 우리는 switch (choice) { case 0: break; case 1: break; case 2: break; } 형태로 구현을 했었다. 하지만 case마다 0, 1, 2의 의미가 직관적이지 않아서 각 경우들을 바로 알 수 없었다. 그래서 코딩을 하는 경우 숫자를 넣기 보다 0에 해당하는 의미의 단어, 1에 해당하는 의미의 단어 등 우리가 알아볼 수 있는 단어로 바꿔 넣는것이 좋다. 더보기 if문의 조건같은 경우는 조건 안에 변수를 넣을 수 있지만 switch 문의 case에 들어가는 값의 경우 고정된 값을 넣어야 한다. 즉, 변수를 넣을 수 없고 상수를 넣어야 한다. ( const) 또한 String input = Console.ReadLine(); 으로 값 1을 받아오는 경..

언어/C# 2023.09.28