브리지 패턴(Bridge Pattern) 개념/샘플소스/클래스다이어그램

코딩 레벨업
코딩 레벨업
74 بار بازدید - ماه قبل -
https://m.blog.naver.com/jdjhaha/2232...

안녕하세요
코딩레벨업 채널입니다

디자인 패턴은 소프트웨어 설계시
발생하는 반복적 문제들에 대한 해결책들입니다.
이번 영상에서는 브리지 패턴에 대해 알아보겠습니다

브리지 패턴은 구조 디자인 패턴 7종 중 하나입니다

브리지 패턴은 큰 클래스 또는 밀접하게 관련있는 클래스들의
집합을 두 개의 개별 계층 구조(추상화, 구현)으로 나눈 후
각각의 계층을 독립적으로 개발할 수 있도록 합니다

브리지 패턴을 언제 사용해야 할지 예시 프로그램을 통해
알아보겠습니다

문자열과 반복 횟수를 인자로 넘기면 예시와 같이 콘솔에
출력하는 프로그램을 만듭니다

코드를 보겠습니다.
디스플레이라는 클래스에 문자열과 반복횟수를 입력받는
프린트라는 메서드가 정의 되어 있습니다.

랜덤프린트라는 메서드는 랜덤횟수를 받습니다
랜덤 값을 구해 해당 횟수 만큼 문자열을 표시합니다

요구사항이 추가됩니다.
이번에는 시작,중간,종료 문자를 입력받아 출력해야 합니다

추가된 요구사항을 구현하기 위해 디스플레이 클래스에
프린트 캐릭터 함수 코드를 추가합니다
랜덤 프린트 캐릭터 함수도 추가합니다.

만약에 지금까지 콘솔에 출력하던 기능들을
파일에 저장해야 하는 요구사항이 추가 된다면
디스플레이 클래스가 어떻게 변할지 상상이 되시나요?

하나의 큰클래스가 되거나, 상속을 활용한다고 해도
요구사항이 추가 될 때마다 비슷한 중복코드가 늘어나게 됩니다.

브리지 패턴은 어떻게 이런 문제를 해결할 수 있을까요?

큰 클래스에서 추상적인 기능 계층과 구체적인 구현 계층을
나누는 설계를 함으로써, 각 계층을 개별적으로 확장하며
개발할 수 있도록 합니다.

추상적인 기능 계층과 구체적인 구현 계층을 나눕니다
문자열 출력과 문자 출력 예시를 생각해 봅니다.
여는 문자열 출력, 입력한 문자열 출력, 닫는 문자열 출력
여는 문자 출력, 입력 문자 출력, 닫는 문자 출력

추상 계층은 구체적인 출력 내용이나 방식을 제외하고,
열고, 출력하고, 닫는다 라는 추상적인 기능만을 뽑아내서
디스플레이 클래스 메서드를 구성합니다.

구현 계층의 최상위 클래스는 다형성을 활용하기 위해
추상클래스 또는 인터페이스로 구체적인 구현에 필요한
메서드들을 선언해 놓습니다

그리고 이 두개의 계층사이에 브리지를 놓습니다.
여기서는 디스플레이 클래스에 있는 디스플레이 임플 참조변수가
추상 계층과 구현 계층을 이어주는 브리지가 됩니다.
추상 계층의 모든 함수는 실제로는 디스플레이 임플 참조변수를
통해서만 동작하게 됩니다.
이제 추상기능 계층과 구현 계층이 구조적으로 나눠졌습니다.

개선된 추상적 기능이란 기존 추상계층의 기본 구현을 개선하여
카운트 디스플레이와 같이 입력받은 횟수 만큼 본문을 출력하는
기능으로 개선한 것입니다

구현계층에서는 디스플레이임플 클래스를 상속받고,
문자열 콘솔 출력에 대한 구체적인 내용을 구현합니다.

브리지 패턴을 적용하면 이런 구조를 활용하여,
랜덤 횟수 만큼 출력하는 추상기능 추가와
문자를 콘솔로 출력하는 구체적인 구현을 개별적으로 개발할 수 있습니다.

무엇을 할 것인가에 해당하는 추상적인 기능계층이 있습니다
어떻게 할 것인가에 해당하는 구체적인 구현계층도 있습니다
이 2개의 계층은 추상계층의 모든 동작을
구현계층의 특정 객체에 위임함으로써 브리지 패턴으로 연결됩니다

브리지 패턴의 클래스 다이어그램입니다.
Abstraction 은 추상화 계층의 최상위 클래스를 의미합니다
예시에서는 Display 클래스가 이 역할을 했습니다.

Implementation은 구현 계층의 최상위 인터페이스를 의미합니다
예시에서는 DisplayImpl 추상클래스가 이 역할을 했습니다.

Refined Abstraction은 개선된 추상화 클래스 들을 의미합니다.
예시에서는 CountDisplay, RandomDisplay
클래스가 이 역할을 했습니다

Concrete Implementations는 구체적인 구현 클래스들입니다.
예시에서는 StringDisplayImpl,
CharDisplayImpl 클래스가 이 역할을 했습니다

클래스 다이어그램에 브리지가 표현되어 있습니다
Abstraction 계층의 주요 동작을
Implementation 참조변수를 통해 모두 위임함으로써
브리지 구조가 생성됩니다

감사합니다
ماه قبل در تاریخ 1403/03/18 منتشر شده است.
74 بـار بازدید شده
... بیشتر