(C#) 28. 리스트 (List)
Data Structure
Data Structure
타일 맵을 2차원 배열로 만들어 콘솔에 그렸다. GetLength(0)과 (1)이 각각 무엇인지, [y, x] 순서를 헷갈리면 어떻게 되는지, 콘솔 색을 되돌리지 않으면 생기는 문제를 정리했다.
같은 타입 여러 개를 묶는 배열과 순회 방법. max를 0으로 초기화해서 생기는 버그, 빈 배열에서 평균을 구할 때 터지는 문제, foreach와 for를 언제 나눠 쓰는지 정리했다.
Text RPG 게임
찾고 바꾸고 자르는 기본 함수들. string이 불변이라 Replace가 원본을 안 바꾼다는 것, 루프에서 이어붙이면 왜 느려지는지, ToLower가 터키어에서 다르게 동작하는 것까지 정리했다.
부모 타입으로 불러도 자식 구현이 실행되게 하는 virtual/override. virtual을 빼면 변수 타입에 따라 다른 함수가 불리는 것, base와 sealed, abstract까지 확인했다.
자식을 부모 타입에 담는 건 항상 되는데 반대는 조건부다. 캐스팅·is·as 세 가지 방법의 실패 방식이 어떻게 다른지, C# 7의 패턴 매칭으로 어떻게 줄어드는지 정리했다.
필드를 public으로 열어두면 규칙을 지킬 수 없다. private·protected·internal의 범위와 기본값, Setter를 두는 이유와 그것만으로는 부족한 경우를 정리했다.
직업마다 클래스를 만들다 중복이 생겨서 공통 부분을 부모로 뺐다. base()로 부모 생성자를 고르는 법, 생성자 실행 순서, 부모에 기본 생성자가 없으면 자식이 컴파일되지 않는 이유를 정리했다.
static 필드로 객체 개수를 세는 예제로 클래스 소속과 인스턴스 소속의 차이를 확인했다. Clone도 생성자를 타서 번호가 올라가는 것, static 함수에서 필드에 못 닿는 이유, 여러 스레드에서 counter++가 어긋나는 것까지.