티스토리 뷰

디자인 패턴

07. 브릿지 패턴

jin-park 2022. 2. 10. 17:12

1. 의미

  • 추상적인 것과 구체적인 것을 분리하여 연결하는 패턴
  • 하나의 계층 구조일 때보다 각기 나누었을 때 독립적인 계층 구조를 발전시킬 수 있다.

다이어그램

2. 예제

2.1. 하나의 계층 구조

public interface Champion {
    void move();
    void skillQ();
    void skillW();
    void skillE();
    void skillR();
}
public class KDAAri implements Champion {
    @Override
    public void move() {
        System.out.println("KDA Ari move");
    }
 
    @Override
    public void skillQ() {
        System.out.println("KDA Ari Q");
    }
 
    @Override
    public void skillW() {
        System.out.println("KDA Ari W");
    }
 
    @Override
    public void skillE() {
        System.out.println("KDA Ari E");
    }
 
    @Override
    public void skillR() {
        System.out.println("KDA Ari R");
    }
}

2.2. 독립적인 계층 구조

public class DefaultChampion implements Champion {
 
    private Skin skin;
    private String name;
 
    public DefaultChampion(Skin skin, String name) {
        this.skin = skin;
        this.name = name;
    }
 
    @Override
    public void move() {
        System.out.printf("%s %s move\n", skin.getName(), this.name);
 
    }
 
    @Override
    public void skillQ() {
        System.out.printf("%s %s Q\n", skin.getName(), this.name);
    }
 
    @Override
    public void skillW() {
        System.out.printf("%s %s W\n", skin.getName(), this.name);
    }
 
    @Override
    public void skillE() {
        System.out.printf("%s %s E\n", skin.getName(), this.name);
    }
 
    @Override
    public void skillR() {
        System.out.printf("%s %s R\n", skin.getName(), this.name);
    }
}
public interface Skin {
    String getName();
}

public class KDA implements Skin {
 
    @Override
    public String getName() {
        return "KDA";
    }
}
public class Ari extends DefaultChampion {
    public Ari(Skin skin) {
        super(skin, "Ari");
    }
}
public class Client {
    public static void main(String[] args) {
        // 하나의 계층구조
        Champion integratedKdaAri = new KDAAri();
        integratedKdaAri.skillQ();
        integratedKdaAri.skillR();
 
        // 분리된 계층구조
        Champion seperatedKdaAri = new Ari(new KDA());
        seperatedKdaAri.skillQ();
        seperatedKdaAri.skillW();
    }
}

3. 장점 및 단점

3.1. 장점

  • 추상적인 코드를 구체적인 코드 변경없이도 독립적으로 확장할 수 있다.
  • 추상적인 코드와 구체적인 코드를 분리할 수 있다.

3.2. 단점

  • 계층 구조가 늘어나 복잡도가 증가할 수 있다.

위글은 인프런의 코딩으로 학습하는 GoF의 디자인 패턴강의를 정리하였습니다.

백기선님의 수락으로 정리하였으며 더 자세한 내용은 강의를 수강하시기 바랍니다.

https://www.inflearn.com/course/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/dashboard

 

코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의

디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할

www.inflearn.com

'디자인 패턴' 카테고리의 다른 글

09. 데코레이터 패턴  (0) 2022.02.10
08. 컴포짓 패턴  (0) 2022.02.10
06. 어댑터 패턴  (0) 2022.02.10
05. 프로토타입 패턴  (0) 2022.02.10
04. 빌더패턴  (0) 2022.02.10
댓글