본문 바로가기

Language/Design Pattern

[Desgin Pattern: 구조] 8. Composite

목적

  • 객체를 트리구조로 구성하고 개별객체와 복합객체(Composite)가 구성
  • 클라이언트에서는 두 객체를 동일하게 사용할 수 있음
  • 이 패턴을 적용하면, 기존의 오브젝트를 재이용하기 수월해지고, 오브젝트의 동적인 조립을 실현하는 것이 수월해진다

구조
  • Leaf클래스와 Composite클래스가 있음
  • Leaf클래스와 Composite클래스는 동일한 Abstract를 상속받음
  • Composite클래스는 Leaf클래스들을 답는 용도


예시

<Leaf>


FactoryMethod에서 사용한 유닛 Abstraction을 상속받은 Marine과 Medic 코드를 활용한다.

Marine, Medic은 Leaf 클래스라고 할 수 있다.

정말 스타크래프트 유닛 구성은 이해하기 참 쉽다. 다음부터도 계속 스타크래프트 유닛 구성으로 나만의 예제를 마들어야지!!

아무튼 다음은 유닛을 상속받은 Composite 클래스를 만들것이다.


<Composite>


<Main>

자 사용하는 바법은 다음과 같다.

그냥 마린과 메딕을 각각 객체를 생성한후, 또 각각 attack()을 두번 한다. 그러면 각자 공격을 할것이다. 마린은 총을쏘고 메딕을 치료를하고

Composite를 활용해도 동일한 결과를 가져올 수 있다. 

Corps객체를 생성하고(부대객체라고 생각하면 된다). 그리고 Corps에 생성된 두 Unit 객체를 add한다. (부대지정 ctrl + 1)한뒤 부대지정 어택!! 을 한다.

이려면 마린찍고 어택, 메딕찍고 어택 = 마린, 메딕 부대지정 후 어택 이랑 동일한 결과를 가져오는 것이다.