반응형
구조 패턴이란❓
- 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴.
- 예를 들어 서로 다른 인터페이스를 지닌 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 |