블루프린트에서의 상속 기본 개념
이제 액터와 컴포넌트의 역할에 대해 이해하셨으니, 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념 중 하나인 상속(Inheritance)에 대해 알아보겠습니다. 상속은 블루프린트 개발에서 재사용성과 확장성을 극대화하는 데 필수적인 개념입니다.
상속이란 무엇인가?
상속은 기존 클래스(Class)의 속성(변수)과 기능(함수, 이벤트)을 새로운 클래스가 물려받는 개념입니다.
기존 클래스는 부모 클래스(Parent/Base Class), 새로 물려받는 클래스는 자식 클래스(Child/Derived Class)라고 부릅니다.
비유로 보면, 자동차라는 부모 클래스에는 움직인다, 탑승할 수 있다 같은 공통 기능이 있습니다.
여기서 스포츠카나 트럭을 자식 클래스로 만들면, 공통 기능을 다시 작성할 필요 없이 상속받고 각 클래스의 특징(예: 빠른 가속, 적재 기능)만 추가하면 됩니다.
블루프린트에서 액터 블루프린트나 컴포넌트 블루프린트는 모두 클래스의 한 종류이며, 이들 간에 상속 관계를 설정할 수 있습니다.
블루프린트에서의 상속
언리얼 엔진의 블루프린트는 객체 지향 프로그래밍의 상속 개념을 시각적으로 구현하고 있습니다. 특정 액터 블루프린트를 다른 액터 블루프린트의 자식으로 만들면, 자식 블루프린트는 부모 블루프린트가 가진 모든 컴포넌트, 변수, 함수, 이벤트를 자동으로 물려받습니다.
상속의 이점코드 재사용성: 이미 구현된 기능을 다시 만들 필요가 없어 개발 시간을 단축하고 오류 발생 가능성을 줄입니다.
유지보수 용이성: 부모 클래스에서 기능을 수정하면, 그 기능을 물려받은 모든 자식 클래스에 자동으로 변경 사항이 적용됩니다. 이는 대규모 프로젝트에서 일관성을 유지하고 유지보수를 효율적으로 만드는 데 큰 도움이 됩니다.
확장성: 기존 기능을 건드리지 않고 새로운 기능을 추가하거나, 물려받은 기능을 자식 클래스에서 오버라이드(재정의)하여 특정 동작을 변경할 수 있습니다.
상속 관계 만들기: 부모 클래스 선택
새로운 블루프린트 클래스를 생성할 때, 가장 먼저 부모 클래스 선택(Pick Parent Class) 창이 나타납니다. 여기서 선택하는 클래스가 새로 만들 블루프린트의 부모 클래스가 됩니다.
- 예를 들어, 모든 문이 공통적으로 가지는 열림/닫힘 기능을
BP_Door_Base라는 부모 블루프린트에 구현했다고 가정해봅시다. - 이제 나무 문과 철 문이라는 두 가지 종류의 문을 만들고 싶다면,
BP_Door_Wood와BP_Door_Metal이라는 새로운 액터 블루프린트를 생성할 때, 부모 클래스로BP_Door_Base를 선택할 수 있습니다. - 이렇게 생성된
BP_Door_Wood와BP_Door_Metal은BP_Door_Base가 가진 열림/닫힘 기능과 모든 변수, 컴포넌트를 물려받게 됩니다. 여기에 각 자식 클래스만의 시각적 요소(나무 모델, 철 모델)나 추가적인 기능(철 문은 자물쇠 기능)을 더할 수 있습니다.
상속된 기능 오버라이드(Override)하기
자식 클래스에서는 부모 클래스에서 물려받은 함수나 이벤트를 오버라이드(Override, 재정의)하여 자신만의 고유한 방식으로 동작하도록 만들 수 있습니다. 이는 부모 클래스의 기본 동작은 유지하되, 특정 자식 클래스에서만 다르게 작동해야 할 때 매우 유용합니다.
오버라이드 방법자식 블루프린트 에디터를 엽니다.
좌측 함수(Functions) 패널 또는 이벤트 그래프에서 오버라이드하고 싶은 함수나 이벤트를 찾습니다.
함수 패널의 경우, 오버라이드하고 싶은 함수 위에서 마우스 오른쪽 버튼을 클릭하고 오버라이드 함수 생성(Create Overridden Function)을 선택합니다.
이벤트 그래프의 경우, 예를 들어 Event BeginPlay와 같이 이미 존재하는 기본 이벤트를 선택합니다.
오버라이드된 함수 또는 이벤트의 그래프에 새로운 로직을 구현합니다.
Parent Call 노드: 오버라이드된 함수나 이벤트 내부에서 Parent Call 노드를 사용하여 부모 클래스의 원래 로직을 호출할 수 있습니다. 예를 들어, 자식 클래스에서 추가적인 로직을 실행하기 전에 부모의 BeginPlay 로직을 먼저 실행하고 싶을 때 유용합니다.
BP_Door_Base에 문이 열릴 때 문이 열립니다!라고 출력하는 로직이 OpenDoor 함수에 있다고 가정해봅시다.
BP_Door_Wood (부모: BP_Door_Base) 블루프린트를 엽니다.
좌측 함수 패널에서 OpenDoor 함수를 찾아 마우스 오른쪽 클릭 후 오버라이드 함수 생성을 선택합니다.
OpenDoor 오버라이드 그래프에서 Print String 노드를 추가하여 나무 문이 열립니다!라고 출력하도록 설정합니다.
만약 부모의 문이 열립니다! 메시지도 함께 출력하고 싶다면, Parent: OpenDoor 노드를 Print String 노드 이전에 연결할 수 있습니다.
이처럼 상속은 블루프린트 기반의 게임 개발에서 강력한 구조화 및 재사용 도구입니다. 복잡한 시스템을 설계할 때, 공통된 부분은 부모 클래스에 정의하고, 특수한 부분은 자식 클래스에서 확장하거나 재정의함으로써 효율적인 개발을 가능하게 합니다.
이번 절에서는 블루프린트에서의 상속 개념, 그 이점, 그리고 오버라이드 방법에 대해 알아보았습니다. 상속은 언리얼 엔진에서 객체 지향 설계를 실현하는 핵심적인 방법이며, 앞으로 여러분이 만들 다양한 블루프린트에서 매우 중요하게 활용될 것입니다.