C#에서 다중 상속을 하지 않는 이유
인터페이스를 사용해야하는 이유
인터페이스
인터페이스와 추상 클래스 차이점
열거형: 연관된 상수들을 명명할 수 있다.
enum MyEnum
{
Value1 = 10,
Value2,
Value3
}
모든 값을 지정하지 않으면 순서대로 0부터 지정된다.
앞선 변수의 값이 정의되어 있으면 다음 값이 없을 때 +1 해준다.
위 경우 Value2 = 11
MyEnum myEnum = MyEnum.Value1;
자료형처럼 사용
형변환 가능 > Enum 이 정수라도 정수형과 다르기 때문에 형변환 필요 (int)
switch(enum){
case MyEnum.Value1:
break;
}
박싱: 값형 -> 참조형. 메모리 오버헤드 발생 가능
언박싱: 박싱된 객체 -> 값형. 명시적 타입 캐스팅 해야한다.
델리게이트: 메서드 참조하는 타입. 함수 포인터
delegate int Fun();
람다: 익명 메서드 만드는 방법. 메서드의 이름 없이 만들 수 있음.
(parameter_list) => expression
Func: 반환값이 있는 메서드
LINQ: 쿼리 언어 확장
var result = from 변수 in 데이터소스
[where 조건식]
[orderby 정렬식 [, 정렬식...]]
[select 식];
Nullable: null 값을 가질 수 있는 값형
null 병합 연산자
int nonNullableInt = nullableInt ?? 0
null 인지 아닌지 구분 가능
StringBuilder
시작 시 안내 메세지, 플레이어 생성, 기본 아이템 지급, 메뉴 이동을 하나의 Start() 함수에 다 넣었는데, 기능별로 분리했다. -> 유지보수가 쉬워졌다.😀
기본 메뉴를 보여주는 Menu() 함수에서 switch 문을 사용하여 모든 메뉴를 호출 가능하게 했는데, 메뉴 종류가 추가될 때마다 switch문도 길어져서 비효율적이라고 생각됐다.
-> Dictionary<string, Action>를 추가해서 Dictoinary와 메뉴 출력을 위한 string[]에만 메뉴를 추가하면 되도록 했다.
추가 기능
<휴식> 기능은 GameManager, Player 중 어디에 넣어야 할까?
<던전> 확률 사용하기