오늘은 캐릭터의 제어를 담당하는 클래스를 상속받는 키의 입력 제어 클래스를 만들었다.
하지만 부모의 Awake를 호출해야하는 상황이 왔는데 override 라는 개념은 알았지만 정확히
어떻게 사용해야할지 몰랐다. 그래서 이 부분에 대하여 개념을 살펴보고자 한다.
부모 클래스 Awake의 호출을 못하는 상황
현재 부모의 클래스를 상속받은 PlayerInputController 클래스가 있다.
Awake에 내가 사용하고 싶은 기능들을 넣고 실행을 하면 뭔가 둘다 호출이 되면서 잘될 것같다.
하지만 상속을 받은 자식클래스에서만 Awake가 호출이되고 부모의 Awake는 호출되지 않는다.
이러한 결과로 인해 자식클래스에서 부모의 Awake를 직접 호출해줘야 한다.
해결법
우선 부모의 Awake에 virtual를 사용한다. 왜냐하면 virtual은 자식클래스에서 이 함수를 재정의 하겠다는 의미이기 때문이다.
다음엔 자식 클래스에선 Awake에 override를 사용한다. virtual과 override를 왜 같이 사용하는지 의문이 들 수 있다.
그 이유는 virtual과 override를 같이 사용하면 자식클래스의 인스턴스를 부모클래스로 캐스팅하여 사용할지라도 부모의 메서드가 아닌 실제로 가장 마지막에 사용된 인스턴스의 메소드를 호출하기 때문이다.
그렇기 때문에 base 기능을 사용하여 부모의 Awake를 호출하여 기능을 실행할 수 있다.
회고
override의 개념은 사실 코딩테스트 문제만 풀던 나에겐 익숙치 않은 기능이었지만 이번 기회를 통해
virtual과 override의 활용과 개념을 알게되어서 좋은 경험이 된 것같다. 다음에는 virtual, override, abstract가 정확하게 무슨 차이가 있는지 알아보고싶다.
'TIL > Unity' 카테고리의 다른 글
[Unity] 사용자의 입력을 받는 기능 Input Field (0) | 2023.09.22 |
---|---|
[Unity] 인벤토리 UI를 쉽게 만들어주는 Grid Layout (0) | 2023.09.21 |
[Unity] 직렬화 (0) | 2023.09.18 |
Unity 지연함수 Invoke, Coroutine 의 차이점 (0) | 2023.09.15 |
Unity 효율적인 데이터 관리 (ScriptableObject) (0) | 2023.09.14 |