icon안동민 개발노트

블루프린트에서의 상속 기본 개념


 상속은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아 사용하고 확장할 수 있게 해줍니다.

 블루프린트에서도 이러한 상속 개념을 적용하여 코드의 재사용성을 높이고 효율적인 게임 개발을 할 수 있습니다.

상속의 기본 개념

  • 부모 클래스 (Parent Class) : 기본 기능을 정의하는 클래스
  • 자식 클래스 (Child Class) : 부모 클래스의 기능을 상속받아 확장하는 클래스
  • 상속 관계 : 자식 클래스는 부모 클래스의 모든 public 및 protected 멤버를 상속받습니다.

블루프린트에서 상속 구현하기

  1. 새 블루프린트 클래스 생성
  2. 부모 클래스 선택 대화상자에서 상속할 클래스 선택
  3. 새 블루프린트에서 부모 클래스의 기능을 확장 또는 수정

 예제 : 기본 캐릭터 클래스 상속

부모 클래스: Character
자식 클래스: BP_PlayerCharacter

코드 재사용성 향상

 상속을 통해 공통 기능을 부모 클래스에 구현하고, 특화된 기능을 자식 클래스에서 추가할 수 있습니다.

 예제 : 다양한 무기 시스템

부모 클래스: BP_BaseWeapon
  - 공통 속성: 데미지, 발사 속도
  - 공통 함수: Fire(), Reload()
 
자식 클래스:
  - BP_Pistol: 특화 기능 (빠른 재장전)
  - BP_Shotgun: 특화 기능 (산탄 발사)
  - BP_Rifle: 특화 기능 (연사 모드)

오버라이딩 (Overriding)

 자식 클래스에서 부모 클래스의 함수를 재정의하여 동작을 변경할 수 있습니다.

 구현 방법

  1. 부모 클래스의 함수를 자식 클래스에서 동일한 이름으로 생성
  2. 함수 설정에서 'Override' 옵션 선택
  3. 새로운 로직 구현

 예제 : 데미지 처리 오버라이딩

부모 클래스 (Character):
  Function: TakeDamage
    [입력 데미지] --> [체력 감소] --> [사망 체크]
 
자식 클래스 (BP_ArmoredCharacter):
  Function: TakeDamage (Override)
    [입력 데미지] --> [방어력 계산] --> [감소된 데미지] --> [부모 TakeDamage 호출]

상속 시 주의사항

 1. 깊은 상속 계층 피하기

  • 너무 깊은 상속 계층은 복잡성을 증가시키고 유지보수를 어렵게 만듭니다.
  • 일반적으로 3-4 레벨 이상의 상속은 피하는 것이 좋습니다.

 2. 적절한 추상화 레벨 유지

  • 부모 클래스는 충분히 일반적이어야 하며, 자식 클래스는 구체적인 기능을 구현해야 합니다.

 3. 인터페이스 활용

  • 다중 상속이 필요한 경우, 인터페이스를 사용하여 유연성을 높입니다.

 4. 부모 클래스 수정 시 주의

  • 부모 클래스 변경은 모든 자식 클래스에 영향을 미칩니다.

 5. 생성자 호출 순서 이해

  • 부모 클래스의 생성자가 먼저 호출된 후, 자식 클래스의 생성자가 호출됩니다.

효과적인 상속 구조 설계 팁

 1. 공통 기능 식별

  • 여러 클래스에서 반복되는 기능을 부모 클래스로 추출합니다.

 2. 계층 구조 시각화

  • 상속 관계를 다이어그램으로 그려 전체 구조를 파악합니다.

 3. 확장성 고려

  • 향후 추가될 수 있는 기능을 예상하여 유연한 구조를 설계합니다.

 4. 단일 책임 원칙 적용

  • 각 클래스가 명확한 하나의 책임을 가지도록 설계합니다.

 5. 컴포지션 고려

  • 상속보다 컴포지션이 더 적합한 경우를 식별합니다.

실제 적용 예제 : 적 캐릭터 시스템

BP_BaseEnemy (부모 클래스)
  - 기본 속성: 체력, 이동 속도
  - 기본 함수: Move(), Attack(), TakeDamage()
 
BP_MeleeEnemy (자식 클래스)
  - 특화 기능: 근접 공격 로직
  - 오버라이드: Attack() - 근접 공격 구현
 
BP_RangedEnemy (자식 클래스)
  - 특화 기능: 원거리 공격 로직, 탄약 시스템
  - 오버라이드: Attack() - 원거리 공격 구현
  - 새 함수: Reload()
 
BP_BossEnemy (자식 클래스)
  - 특화 기능: 페이즈 시스템, 특수 능력
  - 오버라이드: TakeDamage() - 페이즈별 다른 데미지 처리
  - 새 함수: ChangePhase(), UseSpecialAbility()

 블루프린트에서의 상속은 게임 개발 과정을 효율적으로 만들어주는 강력한 도구입니다.

 공통 기능을 재사용하고, 특화된 기능을 쉽게 추가할 수 있게 해줍니다.

 하지만 과도한 사용이나 잘못된 설계는 오히려 복잡성을 증가시킬 수 있으므로 적절한 추상화 수준을 유지하고 명확한 목적을 가진 상속 구조를 설계하는 것이 중요합니다.

 상속과 함께 컴포지션, 인터페이스 등 다른 설계 패턴을 적절히 조합하여 사용하면 더욱 유연하고 확장 가능한 게임 시스템을 구축할 수 있습니다.