티스토리 뷰
반응형
Adapter vs Bridge
Adapter 패턴과 Bridge 패턴은 둘다 다른 객체에 대한 직접 접근 대신에 다른 우회적 방법으로 접근함으로써 유연성을 증대시킨다.
두 패턴의 차이
- 두 패턴의 가장 큰 차이는, 목적이 무엇인가?!
- Adapter는 이미 존재하는 두 인터페이스간의 불일치를 해결하려는 것이다.
- Bridge는 추상화 개념과 구현을 따로 만들고, 이들을 연결시키려는 것이 주 목적이다.
- Adapter는 두 클래스간의 종속성을 미리 에측하지 못하고 개발했을 경우 필요한 패턴이다.
- Bridge는 이미 사용자가 추상화 추상화 개념을 구현하는 방법이 여러가지이고 이들 각각이 독립적으로 진화할 수 있음을 파악한 상태에서 적용하는 패턴이다.
Adapter
- 필요한 형태로 정해서 재활용한다.
- Adapter Pattern == Wrapper Pattern
- 무언가를 싸서 다른 용도로 사용할 수 있도록 교환해주는 것이다.
- 기존의 클래스를 수정해서 필요한 클래스로 만든다.
- 만약 버그가 발생해도, 기존 클래스에는 버그가 없기 때문에 Adapter 역할의 클래스를 중점적으로 조사만 함으로써 대응이 가능하여 프로그램 체크가 아주 간편해진다.
- Ex. 우리 나라는 전기를 220v 사용하는데, 110v 사용하는 나라로 여행을 갈 때면 어댑터가 필요하다.
- 이 처럼 어댑터 패턴도 마찬가지로, 자신의 설계는 그대로 사용하고 외부 라이브러리를 가져와 사용하고 싶을 때, 어댑터 패턴을 사용해서 중간에 변환을 시키는 것이다.
- Ex. 우리가 사용하려고 하는 메소드는 methodB()인데, 우리는 methodA()를 호출해야한다고 해보자.
- 이 때, 어댑터 객체는 methodA()를 제공하고 내부에서 methodB()를 호출해주면 되는 것이다.
- Adaptee는 변환되어야할 타깃 객체의 인터페이스를 포함하고 있다.
- Client는 Adapter 객체의 methodA()만 호출하고 있다.
- Adapter 객체는 내부(methodA())에서 Adaptee의 methodB()를 호출하고 있다.
- 즉, Adapter 객체는 호출해야할 객체의 인터페이스를 중간에서 변경해주는 목적을 가지고 있는 것이다.
- 이 때, 어댑터 객체는 methodA()를 제공하고 내부에서 methodB()를 호출해주면 되는 것이다.
https://hamait.tistory.com/868
Bridge
- 기능의 계층과 구현의 계층을 분리한다.
- '기능의 클래스 계층'과 '구현의 클래스 계층'사이에 다리를 놓는다.
- Ex. 새로운 '기능'을 추가할 때
- MyClass
- MyClassSon
- MyClassSonOfSon
- MyClassSon
- 새로운 기능을 추가할 시 클래스 계층 안에서 새로 만들려고 하는 클래스와 유사한 클래스를 찾아내 하위 클래스를 만들어 기능을 추가한다.
- 하지만 클래스 계층을 너무 깊게 하는 것은 가독성이 안 좋아질 수 있다.
- MyClass
- Ex. 새로운 '구현'을 추가하고 싶을 때
- AbstractClass
- ConcreateClass
- AnotherconcreateClass
- ConcreateClass
- 두개로 클래스 계층을 나눠두면 각각의 클래스 계층을 독립적으로 확장할 수 있다.
- 이 때, 구현의 클래스 계층은 저녛 수정하지 않아도 된다. 게다가 새로 추가한 기능은 '모든 구현'에서 이용가능하다.
- AbstractClass
- 상속은 견고한 연결, 위임은 느슨한 연결
Bridge 장점
- 구현을 인터페이스에 완전히 결합시키지 않았기 때문에 구현과 추상화된 부분을 분리시킬 수 있다.
- 추상화된 부분과 구현 부분을 독립적으로 확장시킬 수 있다.
- 추상화된 부분을 구현 클래스에서 변경을 해도 클라이언트 쪽에는 영향을 끼치지 않는다.
- 추상과 구현이 한 클래스에 같이 붙어있지 않고 분리하여 확장을 쉽게 하고 싶을 때 사용가능하다. 추상과 구현이 분리되어 결합도가 낮다
반응형
'Java > Java 기초' 카테고리의 다른 글
[Java 기초] 프록시 패턴 보충_Proxy Pattern vs Decorator Pattern (0) | 2020.04.19 |
---|---|
[Java 기초] Java의 Collection (0) | 2020.04.08 |
[Java 기초] Error와 Exception (0) | 2020.03.30 |
[Java 기초] 다이나믹 프록시 정리 (0) | 2020.03.30 |
[Java 기초] 클래스의 프록시 (0) | 2020.03.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 김영한
- java
- 스프링부트
- 빈 순환 참조
- Spring
- JPA
- 정적팩터리메서드
- 점층적 생성 패턴
- 복사 팩토리
- 자바8
- @Lazy
- java8
- flatMap
- jdk버전
- 이펙티브 자바
- Effective Java
- springboot
- 이펙티브자바
- 인프런
- effectivejava
- try catch finally
- 연관관계
- 생성자
- ifPresent
- 빌더 패턴
- junit
- 팩토리 메소드 패턴
- mustache
- try with resources
- package-private
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함