Deff_Dev
[Unity/C#] 다형성 (업 캐스팅, 메소드 오버라이딩, is/as 연산자) 본문
해당 포스팅은 고박사님의 유니티 C# 강의를 보고 공부한 내용과 추가적으로 공부한 내용을 정리한 포스팅입니다.
다형성
- 객체가 여러 가지 다양한 형태를 가지는 것을 뜻한다.
→ 상속을 받는 자식 클래스가 다양한 형태를 가지게 된다.
업 캐스팅 (Up - Casting)
- 부모 클래스의 객체 변수에 자식 클래스 메모리 할당이 가능한 것
- 부모 클래스와 자식 클래스 사이에 형 변환이 가능하다.
부모 클래스의 참조 변수에 자식 클래스의 객체를 참조하는 업 캐스팅을 했을 때, 부모와 자식에게 동일한 메소드가 있다면 부모 클래스의 메소드가 호출된다.
업 캐스팅을 사용하는 이유
- 형식을 통일해 효율적으로 작업하기 위해 사용한다.
- 작성해야하는 코드가 더 간결해지고 추가 코드가 필요하지 않기 떄문에 수정에 용이하다.
업 캐스팅 Before
업 캐스팅 After
모든 적의 형식을 Enemy로 통일했기 때문에 Player 클래스의 Hit() 메소드를 하나만 정의해 여러 적에게 대응할 수 있다.
이런식으로도 Enemy 배열을 만들어 업 캐스팅을 활용할 수 있다. (실행 결과는 위 코드와 똑같다.)
하지만 부모 클래스에 정의된 TakeDamage() 메소드를 호출하기 때문에 모든 종류의 적이 완전히 동일한 피격만 가능하다.
즉, 각 클래스마다의 개성을 잃어버린다. → 메소드 오버라이딩으로 해결
메소드 오버라이딩
- 업 캐스팅으로 형식이 통일되었을 때 부모 클래스의 메소드가 아닌 자식 클래스의 메소드가 호출되도록 하는 것
부모 클래스는 virtual로 메소드를 정의하고, 자식 클래스는 override로 메소드를 다시 정의한다.
※ private로 선언된 메소드는 오버라이딩 불가능
각각의 자식 클래스의 TakeDamage() 메소드가 호출되는 것을 볼 수 있다.
다운 캐스팅
업 캐스팅을 했을 땐 다운 캐스팅이 가능하지만, 업 캐스팅을 안한 변수는 다운 캐스팅이 불가능하다.
다운 캐스팅이 불가능한 경우에는 컴파일 할 때 오류가 발생하지 않고, 프로그램을 실행했을 때 오류가 발생한다.
그래서 형 변환이 가능한지, 형 변환에 성공했는지 확인하는 is, as 연산자를 사용한다.
is, as 연산자
is 연산자
- 객체가 해당 형식에 해당하는지 검사한 후 그 결과를 bool 값으로 반환
- 값, 참조 형식 모두 사용 가능
as 연산자
- 형식 변환 연산자와 같은 역할로 형 변환이 가능하면 형 변환을 해서 인스턴스를 반환하고, 형 변환에 실패하면 null을 반환한다.
- 참조 형식에만 사용 가능
'Unity(유니티) > 유니티 공부' 카테고리의 다른 글
[Unity/C#] 메소드 숨기기, 오버라이딩 봉인 (0) | 2024.03.12 |
---|---|
[Unity/C#] 추상클래스, 인터페이스 (0) | 2024.03.11 |
[Unity/C#] 정보 은닉, 캡슐화, 상속 (base 연산자) (0) | 2024.03.11 |
[Unity/C#] 클래스 (0) | 2024.03.09 |
[Unity/C#] 객체 지향 프로그래밍 (0) | 2024.03.09 |