티스토리 뷰
브리지 패턴이란?
구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 합니다. 즉 기능과 구현에 대해서 두 개를 별도의 클래스로 구현을 합니다.
추상 계층에 있는 모든 클래스의 연산 실행은 구현 계층을 통해 이루어 진다.
브리지 패턴 사용 방법
구현 계층
- Implementor : 구현 클래스에 대한 인터페이스를 제공
- ConcreateImplementor: Implementor 인터페이스를 구현. 실제적은 구현 내용을 담음
추상 계층
- Abstraction : 추상적 개념에 대한 인터페이스를 제공하고, 객체 구현부 인터페이스와 집합 관계를 형성
- RefinedAbstraction : 추상적 개념에 정의된 인터페이스를 확장
//추상 부분
public interface Implementor{
void implMethodX();
void implMethodY();
}
public class ConcreteImplementor implements Implementor{
@Override
public void implMethodX(){
//구현
}
@Override
public void implMethodY(){
//구현
}
}
//추상부분
public abstract class Abstraction {
protected Implementor impl;
protected Abstraction(Implementor impl){
this.impl=impl;
}
public abstract void method1();
public abstract void method2();
}
public class RefinedAbstraction extends Abstraction{
public RefinedAbstraction(Implementor impl){
super(impl);
}
@Override
public void method1(){
impl.implMethodX;
}
@Override
public void method2(){
impl.implMethodY;
}
}
// 클라이언트 코드
public class Client {
public static void main(String[] args) {
Abstraction abstraction=new RefinedAbstraction(new ConcreteImplemtor());
abstraction.method1;
}
}
상속 관계
- 실행 시 구현 객체 하나만 존재
- 추상 클래스와 구현 클래스가 컴파일시에 고정
Aggregation 관계
- 실행 시 추상부분 객체와 구현 부분 객체 두 개가 따로 존재
- 실행 시 추상 부분 객체와 구현부분 객체의 연결이 바뀔 수 있다.
- 상속관계보다 더 유연하다.
패턴 사용 시기
- 추상적 개념과 이에 대한 구현 사이의 지속적인 종속 관계를 피하고 싶을 때
- 추상적 개념과 구현 모두가 독립적으로 서브클래싱을 통해 확장되어야 할 때
- 추상적 개념에 대한 구현 내용을 변경하는 것이 다른 관련 프로그램에 아무런 영향을 주지 않아야 할 때
- 클래스 계통에서 클래스 수가 급증하는것을 방지하고자 할 때
패턴 장점
- 추상적인 코드를 구체적인 코드 변경 없이도 독립적으로 확장할 수 있다.
- 추상적인 코드와 구체적인 코드를 분리할 수 있다.
- 구조적인 틀을 작성해놓고, 자유롭게 구현 코드를 주입할 수 있다.
패턴 단점
- 계층 구조가 늘어나 복잡도가 증가할 수 있다.
- 단 하나의 클래스만 만들고 추후에 확장 가능성이 아예 존재하지 않는다면, 오히려 번거로운 작업이 될 수 있다.
'CS > Design Pattern' 카테고리의 다른 글
옵서버 패턴 (Observer Pattern) (0) | 2024.04.18 |
---|---|
싱글톤 패턴 (Singleton Pattern) (0) | 2024.04.18 |
컴포지트 패턴 (Composite Pattern) (0) | 2024.04.17 |
퍼싸드 패턴 (Facade Pattern) (0) | 2024.04.17 |
어댑터 패턴 (Adaptor Pattern) (0) | 2024.04.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- GithubActions
- 복합체 패턴
- jpa
- UML 필요성
- Iterator Pattern
- idtoken
- dfs
- 책임체인패턴
- ArrayDeque
- 프로토타입 패턴
- 빌더 패턴
- 상태 패턴
- springsecurity
- 메멘토 패턴
- 프록시패턴
- restapi
- 퍼싸드패턴
- 양방향연관관계
- 플라이웨이트패턴
- 브리지 패턴
- 책임연쇄패턴
- Flutter
- CompositePattern
- FacadePattern
- n+1
- Chain of Responsibility
- java문법
- 반복자 패턴
- 컴포지트패턴
- 구글로그인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함