(C#) 23. 다형성 (Polymorphism)
부모 타입으로 불러도 자식 구현이 실행되게 하는 virtual/override. virtual을 빼면 변수 타입에 따라 다른 함수가 불리는 것, base와 sealed, abstract까지 확인했다.
부모 타입으로 불러도 자식 구현이 실행되게 하는 virtual/override. virtual을 빼면 변수 타입에 따라 다른 함수가 불리는 것, base와 sealed, abstract까지 확인했다.
자식을 부모 타입에 담는 건 항상 되는데 반대는 조건부다. 캐스팅·is·as 세 가지 방법의 실패 방식이 어떻게 다른지, C# 7의 패턴 매칭으로 어떻게 줄어드는지 정리했다.
필드를 public으로 열어두면 규칙을 지킬 수 없다. private·protected·internal의 범위와 기본값, Setter를 두는 이유와 그것만으로는 부족한 경우를 정리했다.
직업마다 클래스를 만들다 중복이 생겨서 공통 부분을 부모로 뺐다. base()로 부모 생성자를 고르는 법, 생성자 실행 순서, 부모에 기본 생성자가 없으면 자식이 컴파일되지 않는 이유를 정리했다.
static 필드로 객체 개수를 세는 예제로 클래스 소속과 인스턴스 소속의 차이를 확인했다. Clone도 생성자를 타서 번호가 올라가는 것, static 함수에서 필드에 못 닿는 이유, 여러 스레드에서 counter++가 어긋나는 것까지.
객체를 만들 때 초기값을 채우는 생성자. this()로 생성자끼리 연결하는 방법과 실행 순서, 생성자를 하나라도 만들면 기본 생성자가 사라지는 것, this로 이름 가림을 푸는 것을 정리했다.
속성과 기능을 한 덩어리로 묶는 class와 struct를 처음 써봤다. 같은 코드인데 struct는 복사되고 class는 공유되는 것을 직접 확인하고, 그 차이가 어디서 오는지 정리했다.
enum·struct·함수·ref/out을 한 번에 써서 만든 첫 게임. 죽어도 필드를 못 벗어나는 버그, Random을 함수마다 새로 만들어 같은 몬스터만 나오는 문제, 33%가 실제로는 34%인 것을 확인했다.
같은 계산을 반복문과 재귀로 각각 짜봤다. 13!부터 int가 넘치는 것, 재귀가 깊어지면 잡을 수 없는 예외로 죽는 것, 음수를 넣으면 1이 나오는 문제를 확인했다.
안쪽 루프의 횟수를 바깥 변수에 맞추면 삼각형이 나온다. 줄 번호와 개수의 관계를 어떻게 잡는지, 역삼각형과 피라미드로 확장하는 법, 루프 없이 한 줄로 쓰는 법까지 정리했다.