1. 다형성(Polymorphism)의 개념
다형성은 객체지향 프로그래밍(OOP)의 중요한 특징 중 하나로, "같은 코드가 여러 가지 형태로 실행되는 특성"을 의미합니다.
- 같은 함수 호출이지만 상황에 따라 다르게 동작할 수 있습니다.
- 주로 상속 관계에서 함수 재정의(Override)를 통해 다형성을 구현합니다.
2. 다형성의 핵심 원리
-
오버라이드(Override):
- 부모 클래스에 정의된 함수를 자식 클래스에서 재정의하는 것을 의미합니다.
- 재정의된 함수는 자식 클래스의 로직에 맞게 동작합니다.
- 결과: 같은 함수 호출이지만, 객체의 타입에 따라 동작이 다르게 나타납니다.
-
C++과 C#의 차이점:
- C++과 C#에서는
virtual
키워드를 사용해 가상 함수로 선언해야 재정의가 가능합니다.
- 블루프린트에서는 함수를 생성하면 기본적으로 오버라이드가 가능합니다.
3. 블루프린트에서의 함수 재정의
3.1 부모 클래스에서 함수 생성
- 부모 클래스를 생성합니다.
- 부모 클래스에서 공통적인 함수를 만듭니다.
- 예:
Shout()
라는 함수를 만들었다고 가정합니다.
- 이 함수는 모든 자식 클래스에서 재정의할 수 있습니다.
3.2 자식 클래스에서 함수 오버라이드
- 자식 클래스를 생성하고 부모 클래스를 상속받도록 설정합니다.
- 자식 클래스에서 오버라이드(Override) 기능을 사용해 부모 함수
Shout()
를 재정의합니다.
오버라이드 방법:
- 블루프린트 에디터에서 오버라이드할 함수를 선택합니다.
- 해당 함수의 Parent 노드를 끊고 새로운 로직을 정의합니다.
4. 블루프린트 오버라이드 예제
예를 들어 Shout()
라는 함수가 다음과 같이 구현되었다고 가정해 봅시다:
-
부모 클래스 (기본 동작):
Shout() 함수: "기본적으로 몬스터가 외친다!"
-
자식 클래스 (오버라이드):
- Goblin 클래스:
"고블린이 쉿쉿 소리를 냅니다!"
- Dragon 클래스:
"드래곤이 불을 뿜으며 포효합니다!"
5. 다형성의 적용
다형성을 활용하면 공통된 함수를 호출하더라도 자식 클래스에 따라 다양한 동작을 할 수 있습니다.
예시:
레벨 블루프린트에서 Shout()
함수를 호출하면,
- Goblin 객체는 고블린의 소리를 내고,
- Dragon 객체는 드래곤의 소리를 내게 됩니다.
결과: 같은 함수 Shout()
를 호출했지만, 객체의 타입에 따라 다르게 동작합니다.
6. 다형성의 장점
- 코드의 유연성
- 같은 함수 호출이 다양한 객체에서 각기 다른 동작을 수행합니다.
- 확장성
- 부모 클래스를 상속받아 새로운 클래스를 추가하면 기존 코드를 변경하지 않아도 됩니다.
- 유지보수 용이
- 하나의 함수 호출로 여러 객체를 관리할 수 있어 코드 관리가 쉬워집니다.
7. 오버라이드 과정 요약
- 부모 클래스에서 기본 함수를 정의합니다.
- 자식 클래스에서
Override
기능을 통해 함수를 재정의합니다.
- 블루프린트에서 함수 호출 시, 자식 클래스의 오버라이드된 함수가 실행됩니다.
8. 다형성 구현 시 주의사항
- 오버라이드된 함수는 반드시 부모 함수와 이름, 인자 형식이 일치해야 합니다.
- 부모 함수는 공통된 로직만 정의하고, 자식 클래스에서 구체적인 로직을 재정의합니다.