Bridge Pattern
Last updated
Last updated
추상적인 부분과 그것의 실현된 부분을 분리하는 하고 모두 독립적으로 변화할 수 있도록 개발하는 패턴.
각각의 역할
추상 인터페이스를 정의하면 집계 관계에서 추상 클래스에는 Implementor 유형의 객체가 포함되며, 이는 추상 비즈니스 방법과 특정 비즈니스 방법을 모두 포함할 수 있는 Implementor 유형 객체.
구현 클래스의 인터페이스를 정의하며, 이 인터페이스는 Abstraction 클래스의 인터페이스와 다를 수 있습니다.일반적으로 구현 클래스 인터페이스는 기본 작업만 정의하는 반면 추상 클래스 인터페이스는 더 복잡한 작업을 수행할 수 있음.
추상 클래스에서 정의된 인터페이스를 구현하는 특정 클래스는 Implementor에서 정의된 방법으로 호출될 수 있음.
구체적으로 Implementor 인터페이스를 구현하고 다른 특정 구현 클래스에서 다른 특정 작업을 구현합니다.실행 시 Concrete Implementor가 상위 클래스를 대체.
일반적인 사례를 예로들면, 우리 데스크탑에 여유저장 공간부족으로 하드를 새로 구입해서 메인보드에 장착한다고 생각해보자. 이 경우도 브릿지 패턴을 떠올릴수 있다. 데스크탑 전체를 교체하는게 아니라 필요한 용량의 하드디스크를 추가로 장착할수 있게 이미 소켓이 있기때문에 우리는 얼마든지 새로운 하드를 교체 및 추가 장착할수 있다. 뭐 요즘 나오는 IT 기계는 물론 자동차, 심시어 어린이 장난감도 기존 메인 바디에 비용을 추가하면 얼마든 새로운 아이템들을 추가하거나 확장할수 있다. 알고보면 프로그램의 디자인패턴도 결국은 일상생활에도 똑같이 적용되어 있을뿐 새로운 혁명같은 산물은 아니라는것이다.
그럼 코드로 한번 살펴보자.
아까 위에서 예를 들었던 데트크탑(PC)의 추상클래스를 만들어본다.
개인 데스크탑 이므로 기존 추상클래스를 상속받는다.
뜬금없이 서버도 만들어보자
하드소켓을 추상화 해보자
필요한 사이즈가 512이므로 상속받아서 512사이즈 하드를 만들어보자
요즘 영화나 사진들이 모두 초고화질로 나오니 1TB 짜리 하드도 만들어보자
테스트 코드 작성
우리는 좀 더 나아가서 spring에서 사용하는 JDBC 의 소스를 깊게 파보자.
장점: 브리지 모드는 추상 부분과 구현 부분을 분리하여 인터페이스를 별도로 정의하므로, 추상 부분과 구현 부분이 서로 영향을 주지 않고 각각 독립적으로 확장될 수 있다.
단점: 브리지 모드는 시스템에서 두 개의 독립적인 차원을 정확하게 식별해야 하므로 사용 범위에 특정 제한이 있다.
시스템이 두 계층 간의 정적 상속 연결을 피하기 위해 구성 요소의 추상화된 역할과 구체화된 역할 사이에 더 많은 유연성을 추가해야 하는 경우 브리지 모드를 통해 추상 계층에서 관계를 설정할 수 있다.클래스에는 두 개의 독립적으로 변화하는 차원이 있으며 이 두 차원은 모두 확장되어야 하며 브리지 모드에도 적용할 수 있다.