Bridge Pattern
• Abstraction과 implementor을 분리해서 independent하게 만든다.
• Abstraction과 implementor 사이에 다리를 놓는 역할
• Animal을 Boat, Car, Airplane 중에 태워야 함
• Class 구조 고려하지 않고 코딩을 한다면 Animal 2종류 운송수단 3 종류 ,
즉 6(2x3=6)가지 클래스를 따로 만들어줘야 함
• 만약 더 많은 종류가 생기면 복잡해짐
-> Bridge Pattern 생각해볼 수 있음
• Vehicle class를 만들어 Base class로 삼고 Boat, Car, Airplane class는 Vehicle class를 상속받는다.
• Vehicle class는 Animal을 property로 갖고있는다.
• Vehicle과 Animal 둘 사이의 관계가 이어지면서 Bridge로 본다.
• Animal 에서 상속받은 Cat과 Dog class 존재
• 모두 speak 함수 존재
• Vehicle class는 내부에 Animal object 존재
• start 함수 존재
• Car, Boat, Airplane class는 Vehicle 상속받음
• Cat object인 cat 생성
• Boat object인 boat 생성 후 인자로 cat 넘겨줌
• boat 출발시키면 boat를 탄 cat 결과 출력
• Dog object인 dog생성
• Car object인 car생성 후 인자로 dog 넘겨줌
• car 출발시키면 car을 탄 dog 결과 출력
• Bridge Pattern은 Abstraction만 볼 수 있고 내부의 실제 implementor 은 숨길 수 있는 구조
• Bridge Pattern은 외부에서 보여지는 것과 내부 implementor를 분리하고자 할 때 사용하기 좋다.
• 외부 운전자가 와서 오직 Abstraction layer만 보고 Car 종류 선택할 수 있음
• 예) SUV로 운전하면 drive하면 drive가 powerup 호출
• 즉, 최종 운전자는 abstract한 객체인 Car 종류만 선택해서 drive, stop만 신경쓰면 됨
• 그 내부의 Gas, Diesel, Motor 등의 특성 혹은 구동 방법 등은 알 필요 없음
-> 이렇게 Abstraction과 Implementor 구분한 class 구조를 가지게 되면
나중에 Power에 수소엔진을 추가한다고 하더라도 자동차 외부는 그대로 쓸 수 있음
• Abstraction 역할의 Car class • Implementor 역할의 Power class
• 내부 property로 power 가짐 • Engine, Motor은 Power 종류로 상속 받음
• Sedan은 Car 종류로 상속받음 • powerup, powerDown 함수 있음
• Drive, stop 함수 있음
• Drive 함수는 powerUp 호출
• Stop 함수는 powerDown 호출
• Sedan 객체 만들고 argument로 Power 자식 class인 Motor 넘겨줌
• Sedan.drive하여 powerUp 호출
• Sedan.stop하여 powerDown 호출
• sedanOnlyFn 호출
• 내부 Implementor은 Motor이지만 그 외부는 Sedan이라는 output이 나옴
-> Bridge Pattern은 겉에서 보여지는 Abstraction과 내부 Implementor를 구분해서 Bridge로 연결하는 역할