코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의
디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할
www.inflearn.com
브릿지
추상적인 것과 구체적인 것을 분리하여 연결하는 패턴
- 하나의 계층 구조일 때 보다 나누었을 때 독립적인 계층 구조로 발전 시킬 수 있다.
Client는 Abstraction을 반환타입으로 사용

예제

- 실질적으로 DefaultBook이 Genre를 필드로 받고있음.
Genre (Implementation)
- 간단한 장르 인터페이스
public interface Genre {
String getGenre();
}
Novel
public class Novel implements Genre{
@Override
public String getGenre() {
return "Novel";
}
}
Essay
public class Essay implements Genre{
@Override
public String getGenre() {
return "Essay";
}
}
Book (Abstraction)
- Book 인터페이스
public interface Book {
void bookInfo();
}
DefaultBook
- Book의 기본적인 구현체
- Genre를 필드로 받음
bookInfo()를 구현
public class DefaultBook implements Book{
private Genre genre;
private String title;
private String author;
public DefaultBook(Genre genre, String title, String author) {
this.genre = genre;
this.title = title;
this.author = author;
}
@Override
public void bookInfo() {
System.out.printf("title : %s, author : %s, genre : %s\n", title, author, genre.getGenre());
}
}
Stoner
public class Stoner extends DefaultBook {
public Stoner(Genre genre) {
super(genre, "STONER", "John Williams");
}
}
App
- 책에대한 구현체와 장르에 대한 구현체를 달리 만들어서 하나의 Book을 생성하였다.
public class App {
public static void main(String[] args) {
Book book = new Stoner(new Novel());
book.bookInfo();
// title : STONER, author : John Williams, genre : Novel
}
}
장/단점
장점
- 추상적인 코드를 구체적인 코드 변경 없이도 독립적으로 확장할 수 있다.
- Book코드에 Genre 인터페이스를 추가한 것처럼 확장 필요시 이어 붙이면 된다.
- 반대로 삭제하고 싶으면 해당인터페이스를 지우면 되므로 변경에 자유롭다.
- 추상적인 코드와 구체적인 코드를 분리할 수 있다.
- Book과 Genre 분리
단점
- 계층 구조가 늘어나 복잡도가 증가할 수 있다.
개인적인 생각
Adapter vs Bridge
공통점
연관없는 클래스들을 연결한다.
차이점
- Adapter
- 두 가지의 연관없는 클래스를 연결시켜주는 패턴 (1:1)
- 호환성을 위해 반환타입 변형 용도로 사용
- Bridge
- 하나의 클래스에서 다리를 놓아서 확장하는 패턴 (1:N)
- 중심 클래스의 기능 확장 용도로 사용
'Java > 디자인 패턴' 카테고리의 다른 글
| [디자인 패턴] 어댑터 패턴 (0) | 2023.04.22 |
|---|---|
| [디자인 패턴] 프로토타입 패턴 (0) | 2023.04.20 |
| [디자인 패턴] 빌더 패턴 (0) | 2023.04.19 |
| [디자인 패턴] 추상 팩토리 (0) | 2023.03.02 |
| [디자인 패턴] 팩토리 메서드 (0) | 2023.03.02 |