브릿지 패턴
구조 관련 디자인 패턴.
예제는 챔피언과 스킨으로 분리하여 연결하는 것이었다.
추상적인 것과 구체적인 것을 분리하여 연결하는 패턴.
하나의 계층 구조일 때 보다 각기 나누었을 때 독립적인 계층 구조로 발전시킬 수 있다.
브릿지 패턴을 사용하지 않고 하나의 계층구조로 코드를 작성하면,
계층 구조가 커지고,
다른 클래스와 닮아있고,
여러 조합이 생기고,
중복코드가 많은 것 같은 느낌을 줄것이다.
브릿지 패턴은 상속이 아닌 컴포지션을 사용한다.
‘둘로 나눠져 있으니 연결해서 사용한다’를 초점으로 살펴봐야 한다.
Client는 Implementation을 직접 사용하지 않고 추상적인 계층 구조만 사용한다.
Implementation을 간접적으로 사용한다.
Client가 Abstraction이라는 클래스를 의존하고 Abstraction은 Implementation이라는 인터페이스를 의존하는 구조로 패턴이 구성되어 있다.
Abstraction
Client가 사용하고 고차원적인 로직을 담고있다.
Implementation
추상적인 개념의 다양한 변형체들.
구체적인 상태를 담고있다.
패턴 적용 예제
한 계층 구조로 만든다면 챔피언과 스킨의 무수한 조합으로 클래스가 생길 것이다.
하지만 브릿지 패턴으로 코드를 작성하였을 경우,
챔피언을 추가하고 싶을 때 스킨과 관계없이 챔피언만 추가 가능하고,
그 챔피언에 기존 스킨을 적용할 수 있게된다.
구현 코드는 챔피언 생성자를 호출할 때 스킨 인스턴스를 주입하는 방식으로 사용하고 있다.
챔피언 생성자를 구현할 때 스킨 인터페이스를 파라미터로 받기 때문에 스킨 구현체 어떤 것이든 주입받을 수 있다.
다른 계층 구조에 영향을 주지 않고 현재 계층 구조만 확장할 수 있다는 것이 핵심이다.
브릿지 패턴의 장점과 단점
장점
1. 추상적인 코드를 구체적인 코드 변경 없이도 독립적으로 확장할 수 있다.
2. 추상적인 코드와 구체적인 코드를 분리할 수 있다.
단점
계층 구조가 늘어나 복잡도가 증가할 수 있다.
하지만 브릿지 패턴을 학습한 이후는 이렇게 구성한 목적을 알게되고 구조를 빠르게 파악할 수 있게되기 때문에 크게 단점으로 느껴지지 않을 것이다.
https://refactoring.guru/ko/design-patterns/bridge
'프로그래밍 강의 메모 > 코딩으로 학습하는 GoF의 디자인 패턴_백기선' 카테고리의 다른 글
구조 관련 디자인 패턴 > 데코레이터 패턴(Decorator Pattern) (0) | 2022.05.25 |
---|---|
구조 관련 디자인 패턴 > 컴포짓 패턴(Composite Pattern) (0) | 2022.05.25 |
구조 관련 디자인 패턴 > 어댑터 패턴(Adapter Pattern) (0) | 2022.05.25 |
객체 생성과 관련 디자인 패턴 > 프로토타입 패턴(Prototype Pattern) (0) | 2022.05.25 |
객체 생성과 관련 디자인 패턴 > 빌더 패턴(Builder Pattern) (0) | 2022.05.25 |