본문 바로가기

Design/Design Pattern

[Design Pattern] Bridge Pattern

이번 장에서는 브릿지(Bridge) 패턴에 대해서 알아보도록 한다.
샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다.


브릿지 패턴이란?
위키백과에 따른 정의는 아래와 같다.

구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다.

쉽게 말해서 구현체와 구현체의 행위를 서로 다르게 작성하여 독립적으로 유지보수 하는 패턴이다.
필자는 대학생(구현체)과 대학생활(구현체의 행위)를 가지고 예시를 들어보겠다.


GoF Design Pattern에 따르면 아래와 같은 Class Diagram이 그려진다.

Absraction: 구현체들의 추상 클래스.
RefinedAbstraction: Abstraction을 재정의한 클래스.
Implementator: 구현체들의 행위를 정의한 인터페이스.
ConcreteImplementatorA, B: 구현체들의 행위를 구현한 클래스.

위의 그림을 대학생(구현체)과 대학생활(구현체의 행위)로 바꾸면 아래와 같은 그림이 된다.

Student: 대학생 추상 클래스.
ChemistryStudent, ComputerStudent: Student를 재정의한 구현체 클래스.
UniversityLife: 대학생들의 대학생활을 정의한 인터페이서.
ChemistryUniversityLife, ComputerUniversityLife: 대학생들의 대학생활을 구현한 클래스.

디렉토리 구조를 보면 아래와 같은 그림이 그려진다.


코드를 보면서 하나씩 살펴보도록 한다.

Student Class
자신이 생성될 때 대학생활(UniversityLife)를 주입받고 있으며 행위를 할 때 주입받은 대학생활에게 위임(Delegation)하고 있다.

ChemistryStudent, ComputerStudent Class
자신이 생성될 때 전달받은 대학생활(UniversityLife)을 슈퍼클래스에게 전달하는 역할을 한다.
대학생 구현체의 생성만을 담당하고 있다.

UniversityLife Interface
대학생들의 대학생활(행위)를 정의하고 있다.

ChemistryUniversityLife, ComputerUniversityLife Class
화학과 학생과 컴퓨터학과 학생의 대학생활을 구현하고 있다.

Tester Class
대학생활을 생성하여 대학생에게 자신에게 맞는 대학생활을 주입한다.

Tester Class의 실행결과는 아래와 같다.


지금까지 대학생과 대학생활을 주제로 브릿지 패턴에 대해서 알아보았다.