Blog

ENGINEERING NOTE

[Unreal Engine] 컴포넌트 패턴

해당 포스팅은 Stuart Butler , Tom Oliver의 Game Development Patterns with Unreal Engine 5를 바탕으로 작성한 내용입니다.객체를 여러 개의 독립적인 기능 조각(컴포넌트)으로 분리하고, 이를 조합하여 다양한 객체를

Unreal Engine
해당 포스팅은 Stuart Butler , Tom Oliver의 Game Development Patterns with Unreal Engine 5를 바탕으로 작성한 내용입니다.

컴포넌트 패턴(Component Pattern)이란?

객체를 여러 개의 독립적인 기능 조각(컴포넌트)으로 분리하고, 이를 조합하여 다양한 객체를 만드는 설계 방식.

예를 들어,

  • 이동 기능 컴포넌트
  • 공격 기능 컴포넌트
  • 체력 관리 컴포넌트
  • 애니메이션 처리 컴포넌트

등을 개별적으로 만들어서 필요한 객체에 붙여서 사용할 수 있다.

컴포넌트 패턴을 사용하는 이유

상속 기반의 구조에서는

  • 자식 클래스는 부모 클래스의 내부 구현과 강하게 연결됨
  • 부모 변경 → 모든 자식에게 영향
  • 기능을 분리하기 어려워 서로의 책임이 뒤섞임

등이 발생하여 이런 구조는 유지보수 비용을 폭발적으로 증가시킨다.

하지만 컴포넌트 패턴을 사용 시

  • 기능을 독립적인 컴포넌트로 분리
  • 각 컴포넌트는 자기 역할만 수행
  • 서로에게 의존하지 않기 때문에 개별 수정이 가능
  • Actor는 “기능을 가지고 있을 뿐” 직접 구현하지 않음

즉 수평적으로 기능을 쪼개 결합도를 낮추고 응집도를 높인다.

이로 인한 장점은 다음과 같다.

1. 재사용성 강화

  • 한 번 만든 컴포넌트를 여러 액터에 재사용 가능
  • 기능 단위 테스트가 쉬움
  • 기능 추가/제거가 빠름 (조립식 구조)

2. 유지보수성 · 확장성 증가

  • 특정 기능을 수정해도 해당 기능을 가진 액터에만 영향
  • 새로운 기능도 컴포넌트 하나 추가하면 끝
  • 팀 작업에 유리 (각자 별도 컴포넌트 만들면 충돌 최소화)

언리얼 엔진에서의 컴포넌트 패턴

언리얼 엔진은 ECS(Entity-Component-System)이라는 것을 기반으로 한다. 기본적으로 게임 월드의 모든 오브젝트를 엔티티로 간주한다는 것이다.

각 엔티티는 앞서 설명한대로 어떤 행동을 캡슐화하는 컴포넌트로 구성된다.

만약 새롭게 기능을 추가하고 싶다면 해당 기능을 수행하는 컴포넌트를 추가하면 된다.

  • 체력 있는 드론을 만들고 싶다 → HealthComponent만 추가
  • 원거리 공격만 추가하고 싶다 → ProjectileAttackComponent 부착
  • 새롭게 비행 기능을 넣고 싶다 → FlightMovementComponent 부착
더 자세한 내용은 Breaking Down the Components of Gameplay의 영상을 참고하면 도움이 된다.