[유니티 기초]_2. Component 패턴

0

유니티 엔진

목록 보기
2/21

컴포넌트란?

  • 게임 오브젝트에 붙일 수 있는 미리 만들어진(재사용할 수 있는) 부품
  • 게임 오브젝트에 붙어있는 컴포넌트들은 서로 연관이 없고 스스로 동작하는 독립적인 부품이다.

컴포넌트의 장점

  • 캡슐화를 더 잘 살려 준다.
  • 한 개체가 여러 분야를 서로 커플링 없이 다룰 수 있게 해준다.
  • 컴포넌트의 독립성 덕분에 추가와 삭제가 쉽다.

컴포넌트 패턴 이란?

컴포넌트 패턴이란 모든 코드를 부품화 해서 관리라는것을 말합니다.
모든 기능을 한 함수에 넣어서 동작 시키는 것은 유지,보수 측면에서 가장 피해야하는 행동입니다.

AI, 물리, 렌더링, 사운드처럼 분야가 다른 코드끼리는 최대한 서로 모르는 게 좋습니다. 이런 코드를 한 클래스 안에 전부 넣는다면 결과는 뻔합니다. 클래스 하나가 5천 줄 넘는 거대한 코드가 되죠. 클래스가 크다는 것은 정말 사소한 걸 바꾸려고 해도 엄청난 작업이 필요할 수 있음을 의미합니다. 이런 클래스는 머잖아 기능보다 버그가 더 빨리 늘어나게 됩니다. 이런 단점을 보안하기 위해 유니티는 컴포넌트 구조를 사용하고 있습니다.

상속과 컴포넌트

컴포넌트는 재사용과 있어서 상속 개념과 밀접해있습니다.

예를 들어
상속은 샹크스(특징: 루피를 구하기 위해 팔을 잃음)한테 해왕류에게 먹힌 팔을 가져와서 봉합 수술을 한 다음 다시 붙여주는 것입니다. 이렇게 되면 편리하게 일상 생활을 다시 할 수 있겠지만, 이 팔을 다시 잘린 팔 상태로 만드는건 어렵겠죠? 상속도 마찮가지로 부모 클래스를 삭제하는것은 매우 힘듭니다. 이 팔은 근육, 혈관, 뼈 등 여러 부분에서 같이 쓰고있기 때문이죠.

컴포넌트는 샹크스에게 의수를 붙여주는 것입니다. 의수는 팔의 기능을 수행하지만, 진짜 팔이 아니기 때문에 손쉽게 때어 놓을 수 있습니다. 의존성이 줄어드는 것이죠.

상속 : A is B

장점

  1. 부모 클래스로부터 물려받은 부분은 다시 쓸 필요가 없기 때문에 재사용 면에 있어서 효율적입니다.

단점

  1. 부모, 조상 클래스가 될 공통된 최소 필수 집합을 개발자가 미리 예상하기가 힘듭니다.
    • 즉, 완벽하게 순수한 Base Class를 만드는 것은 힘듬
    • 자식 클래스가 필요로 하지 않는 기능도 물려줄 수 있는 등등 +, - 해야할게 너무 많다.
  2. 컴포넌트들끼리 커플링이 심합니다.
    • A 를 삭제하면 A 를 상속 받고 있던 B, C 에 치명적인 문제가 생긴다. A 의 부분을 상당수 재사용하고 있었는데 A 가 없어졌으니까!
  3. 오크는 몬스터다. Orc is a monster.
    • Is-A 관계이므로 오크는 몬스터를 상속 받아 만들어야 함.

컴포넌트 : A has B

  • 각자의 기능을 가지고 있는 스스로 동작하는 독립적인 부품
    • 애니메이션만 관련있는 컴포넌트, 물리 기능만 관련있는 컴포넌트, 이동 시키는 컴포넌트 등등 각자 기능을 담당하는 컴포넌트들이 독립적으로 구현이 되어 있습니다.
      • 독립적인 클래스로 만들어 두고, 만들어 둔 것을 부품 붙이듯이 갖다 붙이며 됩니다.
    • 컴포넌트를 뗀다고 해서 오브젝트의 다른 컴포넌트에 영향이 가는 것은 없습니다.
      • 컴포넌트들끼리 독립적이며 커플링이 없다.
      • 부품을 갈아끼면 그만.
    • 컴포넌트의 독립성 덕분에 추가와 삭제가 쉽습니다.
  • 코드의 의존성을 줄이고 재활용성을 높입니다.
  • 플레이어는 인벤토리 기능을 가진다. Player has a inventory.
    • 인벤토리 기능은 컴포넌트로 구현하는 것이 좋습니다.

0개의 댓글