본문 바로가기

Language/Design Pattern

[Design Patter: 구조] 7. Bridge

목적

  • 추상(abstraction)과 이것의 구현(implementation)을 분리하여 각각이 독립적으로 변경될 수 있도록 하는 것
  • 클래스 자체가 자주 변할 때 뿐 만 아니라 클래스가 하는 기능이 자주 바뀔때도 유용

예제

스타크래프트로 예제를 만들어보자. 

스타포트에서 나오는 레이스, 드랍쉽에게 Weapon 인터페이스를 가지게 하고 각각의 무기를 따로 클래스로 만들었다.



각각의 유닛들은 각자 Weapon을 하나씩 가지고 있다. 이제 Weapon 인터페이스를 상속받은 무기들을 만들어보자




레이스는 빔을 쏘고, 드랍쉽은 공격이 안돼죠 ㅠㅠ 따라서 2가지 타입의 무기를 각각 만들었습니다.



자 이제 사용하는 부분.

레이스 객체를 만들때 레이저 무기인 WeaponRazer를 만들어 생성자로 전달합니다. 드랍쉽도 마찬가지로 만들고요.


하지만, 유연하게 레이스가 공격기능을 없애고, 드랍쉽에 공격기능을 넣기 위해 우리는 setWeapon을 통해 무기 타입만 바꿔주면 됩니다.

구현 부분을 인터페이스로 작성하니 이렇게 유연해지는군요 ^^