(C#) 25. 간단한 Text RPG 게임 구현하기 2
Text RPG 게임
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++가 어긋나는 것까지.
객체를 만들 때 초기값을 채우는 생성자. this()로 생성자끼리 연결하는 방법과 실행 순서, 생성자를 하나라도 만들면 기본 생성자가 사라지는 것, this로 이름 가림을 푸는 것을 정리했다.
속성과 기능을 한 덩어리로 묶는 class와 struct를 처음 써봤다. 같은 코드인데 struct는 복사되고 class는 공유되는 것을 직접 확인하고, 그 차이가 어디서 오는지 정리했다.
enum·struct·함수·ref/out을 한 번에 써서 만든 첫 게임. 죽어도 필드를 못 벗어나는 버그, Random을 함수마다 새로 만들어 같은 몬스터만 나오는 문제, 33%가 실제로는 34%인 것을 확인했다.