Languages/C#(31)
-
[C#} new 와 sealed 키워드
*이 글은 책을 바탕으로 공부한 글입니다. 1. 부모 클래스의 메소드 숨기자! : new 키워드 부모 클래스로부터 상속 받은 멤버와 이름은 동일하지만 완전히 다른 새로운 멤버로 재정의하고 싶을 때 사용한다. 객체를 생성할 때 사용하는 new 키워드의 의미와는 다르다. 클래스를 작성하다 보면, 만들고 있는 메소드를 나중에 오버라이딩을 할 지 안 할지를 미리 생각한다는 건 쉬운 게 아니다. 왜냐하면, C#에서 오버라이딩을 하기 위해서는 부모 클래스의 메소드를 virtual으로 선언해야 하기 때문이다. 이런 부분까지 전부 설계를 신경써서 작성한다는 것은 경험이 많은 프로그래머가 아니면 어려울 것이다. 그래서 C#에서는 우리 같은 사람들을 위해서, 메소드 숨기기를 지원한다. class Monster { publ..
2022.03.21 -
[C#] 부모 클래스를 가리키는 Base 키워드와 생성자
base 키워드란? 자식 클래스에서 부모 클래스의 멤버에 접근할 때 사용한다. 이런 상황이 있을 수 있다. "부모 클래스와 자식 클래스 모두 동일한 이름의 변수가 있다면?" 이 경우에는 부모 클래스의 변수와 자식 클래스의 변수를 구분해줄 식별자가 필요하다. 이 때, base 키워드가 사용된다. class Monster { protected string name; protected int hp; protected int attackDamage = 1; } class Slime : Monster { protected int attackDamage; public Slime() { this.attackDamage = 5; Console.WriteLine("자식 클래스의 attackPower = {0}", thi..
2022.03.20 -
[C#] this( ) 생성자와 접근 한정자(Access Modifier)
*이 글은 책을 바탕으로 공부한 글입니다. this 생성자란? 자기 자신의 생성자를 가리킨다. 생성자들을 여러 개 만들다 보면, 생성자들 사이에서 코드가 중복되는 상황이 발생하곤 한다. 이런 부분을 해결하고 싶을 때 this( ) 생성자가 유용하게 사용된다. class Monster { string name; int hp; int damage; public Monster(string name) { Console.WriteLine("Monster(string name) 생성자 호출"); this.name = name; } public Monster(string name, int damage) : this(name) { // this(name)는 Monster(string name) 생성자를 호출함 Cons..
2022.03.18 -
[C#] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) + ICloneable 인터페이스
*이 글은 책을 바탕으로 공부한 글입니다. C#의 클래스 부분을 공부하고 있었다. 어떤 객체지향언어를 배우든 클래스와 생성자란 개념이 나왔고, 이것은 익숙하게 알고 있는 내용이었다. 이번에 정리할 글인 얕은 복사와 깊은 복사 또한 잘 알고 있는 내용이었지만, 복사 생성자를 사용할 일이 나에겐 잘 없었다. 그래서 나중에 막힘없이 사용하기 위해 이렇게 글을 포스팅할까 한다. 그 전에 참고로 알아두면 좋은 지식을 먼저 보자. C#에도 종료자(소멸자)는 존재한다. 나는 C#에 생성자만 존재하고 소멸자는 없는 줄 알았다. 하지만 존재했다. class Monster { ~Monster() // 소멸자 { ... } } 생성자와 다르게 오버로딩이 불가능하고, 매개변수를 받지 않는다는 점까지 C++의 소멸자와 성질이 ..
2022.03.18 -
[C#] 가변 인수, 명명된 매개변수, 디폴트 매개변수 + 로컬 함수
*이 글은 책을 바탕으로 공부한 글입니다. C#의 메소드 오버로딩은 오로지 매개변수의 수와 형식만을 분석(반환 형식은 보지 않음)해서 어떤 버전이 호출될 지를 컴파일 타임에 정한다는 내용을 본 후에, 매개변수와 관련된 내용들을 봤다. 가변 개수의 인수 매개변수의 개수가 유연하게 변할 수 있는 인수를 말한다. 가령, 다음과 같이 모든 인수의 합을 구하는 Sum() 메소드 같은 것을 구현할 때 유용하다. Sum(1, 2); Sum(1, 2, 3, 4, 5); Sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 위와 같은 메소드를 구현하기 위해 메소드 오버로딩을 일일히 다 하는 것은 힘들다. 그래서 C#에서는 params 키워드와 배열을 이용하여 가변 개수의 인수를 설정할 수 있게 해놨다. int..
2022.03.18 -
[C#] 참조에 의한 매개변수 전달 (ref, out)
*이 글은 책을 바탕으로 공부한 글입니다. 1. 값에 의한 호출 (Call by value) 함수와 메소드를 호출할 때, 필요한 값들을 전달해주기 위해 매개변수에 값을 넣어 전달해 준다. 값 형식(Value type)은 매개 변수로 전달 시에 해당 인자의 값을 복사해서 전달 함수와 메소드에서 값을 리턴할 때도 마찬가지 이것을 값에 의한 호출(Call by value)이라고 함 두 매개 변수를 받아서 서로 값을 바꾸는 Swap() 함수에서 이런 예시가 자주 나온다. static void Swap(int x, int y) { int temp = x; x = y; y = temp; } 그리고 다음과 같이 사용을 해 본다. static void Main(string[] args) { int x = 3; int ..
2022.03.18