250203 TIL

박소희·2025년 2월 3일

Unity_7기

목록 보기
18/94

4주차 강의

C#에서 다중 상속을 하지 않는 이유

  • 설계 복잡성 증가
  • 다이아몬드 문제: 어떤 부모 클래스의 멤버르 사용해야 하는지 모호해진다.

인터페이스를 사용해야하는 이유

  • 코드의 재사용성
  • 다중 상속 지원
  • 클래스와 인터페이스 간에 느슨한 결합

인터페이스

  • 클래스가 구현해야 하는 멤버를 정의한 것
  • 클래스의 일종이 아니고, 클래스에 대한 제약 조건 명시한 것
  • 클래스가 인터페이스를 구현할 겨우, 모든 인터페이스 멤버를 구현해야 한다.
  • 다중 상속 지원
  • interface I-로 시작

인터페이스와 추상 클래스 차이점

  • 인터페이스는 추상적인 동작만 정의하고, 구현을 하지 않는다.
  • 추상클래스는 일부 종작의 구현을 가진다.
  • 추상클래스는 단일 상속만 가능하다.

열거형: 연관된 상수들을 명명할 수 있다.

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: 반환값이 있는 메서드

  • Func<int, string> 은 int를 입력받아 string 반환
    Action: 반환값이 없는 메서드
  • Action<int, string>은 int, string 모두 입력받고 값 반환 x

LINQ: 쿼리 언어 확장

var result = from 변수 in 데이터소스
             [where 조건식]
             [orderby 정렬식 [, 정렬식...]]
             [select 식];

Nullable: null 값을 가질 수 있는 값형
null 병합 연산자

int nonNullableInt = nullableInt ?? 0

null 인지 아닌지 구분 가능

StringBuilder

  • Append(), Insert(), Replace(), Remove() 등 문자열에 대한 메소드 제공
  • 내부 버퍼를 사용하여 문자열 조작 -> 크기를 동적으로 조정

개인 과제

시작 시 안내 메세지, 플레이어 생성, 기본 아이템 지급, 메뉴 이동을 하나의 Start() 함수에 다 넣었는데, 기능별로 분리했다. -> 유지보수가 쉬워졌다.😀

기본 메뉴를 보여주는 Menu() 함수에서 switch 문을 사용하여 모든 메뉴를 호출 가능하게 했는데, 메뉴 종류가 추가될 때마다 switch문도 길어져서 비효율적이라고 생각됐다.
-> Dictionary<string, Action>를 추가해서 Dictoinary와 메뉴 출력을 위한 string[]에만 메뉴를 추가하면 되도록 했다.

추가 기능
<휴식> 기능은 GameManager, Player 중 어디에 넣어야 할까?

  • 휴식이 게임의 전반적인 기능인지 아니면 플레이어의 행동인지
    -> 플레이어 행동 -> Player 클래스에 Rest() 메서드 구현하여 GameManager에서 호출

<던전> 확률 사용하기

  • 랜덤 수 생성해서 그 범위 내에서 확률 지정하기 (bool)

0개의 댓글