Bridge는 추상(Abstraction)과 구현(implementation)으로 구조를 설계한다는 뜻이다. 자바 스프링에서는 추상과 역할을 분리한다. 정도로 이해하면 될 것 같다. 자바에서는 abstract - interface <- implementation 정도로 배웠는데, 이 bridge 라는 개념은 abstract - interface(implementation)을 의미하는 것 같다. '역할'과 '구현'을 분리하는 것이 아니라, '추상'과 '역할' 이다. 정확한 이해는 2편 예제에서 자세히 알아보자.
문제점
사이트에 나온 삽화와 같이, 역할과 구현을 구분하지 않으면 하나의 역할이 늘어나게 됬을 때, 그에 맞는 구현을 역할의 개수만큼 늘려줘야 하는 단점이 발생한다. 예를 들어 구만 있는 상황에서 정사면체가 추가된다면, 빨간 정사면체와 파란 정사면체를 직접 추가해줘야한다. 반대로, 초록색이 추가된다면 초록색 구와 초록색 정육면체가 추가되어야 한다.
이런 코드를 monolithic code, 하나로 단단히 짜여진 코드라고 부른다.
해결책
그래서 역할과 구현을 나눈다. Shape이 역할이고, Color가 구현이라면 Shape에서 Color 대한 참조를 두게한다. 그렇게 하면 참조만 바꿈으로써 구현체를 달리할 수 있다. 예를들어 Circle에 red, blue 라는 직접적인 구현체를 두는 것이 아니라, Color라는 참조체를 두고 이것을 상황에 따라 red 또는 blue로 변경하는 것이다.
What this means is that you extract one of the dimensions into a separate class hierarchy, so that the original classes will reference an object of the new hierarchy, instead of having all of its state and behaviors within one class.
Abstraction과 Implementation의 구체적 의미
Abstraction은 추상으로 정말 추상적인 것을 말한다. 그래서 abstract는 실제 어떤 기능을 수행하지 않는다.
This layer isn’t supposed to do any real work on its own. It should delegate the work to the implementation layer (also called platform).
프로그래밍 언어에서의 abstract와 interface를 말하고자 하는 것이 아니다. 의미적인 abstract를 말하고 싶은 것 같다.
Note that we’re not talking about interfaces or abstract classes from your programming language. These aren’t the same things.
Implementation이 interface이며 이 interface와 abstraction의 관계를 Bridge 라고 한다. 실제 구현체는 Concrete Implementations에 있다. 또한 클라이언트는 추상화된 Abstraction에만 관심이 있다.
참조
1. refactoring.guru 사이트
2. 회사 본부장 kkh님 감사합니다.
'Programming-[Base] > Design, Architecture' 카테고리의 다른 글
Strategy 패턴 w/ Spring 다형성 (0) | 2024.11.12 |
---|---|
[작성중][헥사고날 아키텍처] - 1. 기본 개념, 도메인 헥사곤 (0) | 2024.04.09 |
[작성중][잠정 중단] 2. Bridge - 예제 : 구체적 이해 (0) | 2021.12.01 |