peacekim
할 수 있는 것과 할 수 없는 것.
peacekim
전체 방문자
오늘
어제
  • 분류 전체보기 (68)
    • 👨‍🏫ps (44)
      • ❄️프로그래머스 (20)
      • 🔟0️⃣백준 (21)
      • leetcode (3)
    • ✍🏻study (20)
      • 👐java (6)
      • 🍃spring (1)
      • 🥇algorithm (0)
      • 🚘oodp (4)
      • 📒 jpa (3)
      • 👣DB (2)
      • 🌂네트워크 (0)
      • 🎸기타 (3)
      • 👊 kotlin (1)
      • 🫥 jvm (0)
    • 📽project (4)
      • 🎀ReBoN (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
peacekim

할 수 있는 것과 할 수 없는 것.

브릿지 패턴이란❓
✍🏻study/🚘oodp

브릿지 패턴이란❓

2022. 8. 29. 21:29
반응형

구조 패턴이란❓

  • 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴.
  • 예를 들어 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나, 객체들을 서로 묶어 새로운 기능을 제공하는 패턴

구조 패턴 특징✌️

  • 서로 독립적으로 개발한 클래스 라이브러리를 마치 하나인 것처럼 사용할 수 있다.
  • 여러 인터페이스를 “합성”하여 서로 다른 인터페이스들의 통일된 추상을 제공한다.
  • 인터페이스나 구현을 복합하는 것이 아니라 객체를 "합성”하는 방법을 재공한다.

 

브릿지 패턴이란❓

  • 추상적인 것과 구체적인 것을 분리하여 연결하는 패턴이다. 여기서 연결이라는 표현이 브릿지를 의미한다.
  • 추상적인 것과 구체적인 것을 구분짓는 것에 집중을 해야된다.

client : abstraction을 사용하는 코드

abstraction: 고차원의 추상적인 로직을 담고 있는 것. abstraction에서 implemenataion 부분을 composition하여서 사용한다. (동작, 프론트, GUI)

implementation: 구체적인 정보를 담고 있는 것. 이것도 interface를 통해 추상화를 시킴 (상태, 백엔드, GUI에서 호출하는 api)

Skin(Implementor)
KDA,PoolParty(concreate Implementation)
Champion(Abstraction)
아리, 아칼리(Refined abstraction)
챔피언은 스킨과 상관없이 늘릴 수 있고, 스킨도 챔피언과 상관없이 늘릴 수 있다.

장단점

장점
- 추상적인 코드를 구체적인 코드 변경 없이도 독립적으로 확장할 수 있다. -> OCP 지킴
- 추상적인 코드와 구체적인 코드를 분리할 수 있다. -> SRP 지킴
- 코드 재사용이 가능하고, 중복되는 코드들을 줄일 수 있다.
단점
- 계층 구조가 늘어나 복잡도가 증가할 수 있다. 계층 구조가 양쪽에 생긴다.

예제💪

//추상화 부분, 클라이언트가 사용하는 부분
public interface Exerciser {
    String workOut();
}

//추상화된 부분을 확장한 부분, sport가 구체적인 부분이다.
public class CrossFitter implements Exerciser {
    private Sport sport;

    public CrossFitter(Sport sport) {
        this.sport = sport;
    }

    @Override
    public String workOut() {
        return sport.exercise() + " 를 한다.";
    }
}

//
public class BodyBuilder implements Exerciser{

    private Sport sport;

    public BodyBuilder(Sport sport) {
        this.sport = sport;
    }

    @Override
    public String workOut() {
        return sport.exercise() + " 를 한다.";
    }
}

//구체적인 부분이다. 추상화된 부분에서 가져다 사용을 함으로 클라이언트가 간접적으로 구체적인 부분을 사용할수
//있다.
public interface Sport {
    String exercise();
}

//구체적인 부분을 확장한 코드이다.
public class CrossFit implements Sport {

    @Override
    public String exercise() {
        return "유산소 운동";
    }
}
//
public class GymSport implements Sport{

    @Override
    public String exercise() {
        return "고립 운동";
    }
}

Main

public static void main(String[] args) {
        Exerciser zeto = new BodyBuilder(new GymSport());
        Exerciser peace = new BodyBuilder(new CrossFit());

        System.out.println(zeto.workOut());
        System.out.println(peace.workOut());
    }

REFERENCE

  • 코딩으로 학습하는 GoF의 디자인 패턴 - 백기선님 강의
반응형

'✍🏻study > 🚘oodp' 카테고리의 다른 글

이터레이터 패턴이란❓  (2) 2022.09.13
Builder패턴, 그리고 Builder annotation는 뭘까🧐  (2) 2022.03.15
DI가 뭔데?  (0) 2022.03.11
    '✍🏻study/🚘oodp' 카테고리의 다른 글
    • 이터레이터 패턴이란❓
    • Builder패턴, 그리고 Builder annotation는 뭘까🧐
    • DI가 뭔데?
    peacekim
    peacekim
    할 수 있는 것과 할 수 없는 것. github: https://github.com/PyeongGangKim

    티스토리툴바