4. 구조패턴
주요 개념 및 내용
Gof의 디자인패턴 중 구조 패턴에 대한 것.
구조패턴 7가지
적응자 (Adapter)
가교 (Bridge)
복합체 (Composite)
장식자 (Decorator)
퍼사드 (Facade)
플라이웨이트(Flyweight)
프록시 (Proxy)
적응자 (Adapter)
레거시 프로젝트에서 사용 중인 인터페이스의 수정에 따라 새로운 인터페이스를 추가하고자 할 때 레거시 의 수정을 최소한으로 하면서 추가시키는 작업. 즉 어댑터로 붙이는 작업을 통해 기존의 코드를 위임시켜 새로운 기능을 실행할 수 있도록 해주는 것!
클래스다이어그램
구현코드
가교 (Bridge)
브리지 패턴은 기능구현계층과 추상(구현)클래스계층의 분리인데, 여기에서는 어댑터를 만들어서 각 클래스를 연결시키고 있다. GoF의 디자인패턴과는 상이한 부분이 보인다. 인터페이스가 없어서 그런걸까? 좀더 이해가 필요해 보인다.
클래스 계층이 1개라면 기능과 구현이 혼재하게 됨. 이것을 분리하기 위한 패턴이 브리지 패턴
기능의 클래스 계층
한 상위 클래스에 기능이 추가될 때,
클래스 상속을 통한 구조
구현의 클래스 계층
일반적인
추상클래스,인터페이스를 구현하는 하위 클래스의 계층 구조
구성
~~God 3개가 존재
위 3개에 따른 Adapter 3개 존재 -> 브리지 역할 이라는데 이런 패턴이아니다 실상
~~God에서 클래스 3개가 사용
아래소스는 수정이 필요해 보임
클래스다이어그램
JS
JAVA
구현코드
복합체 (Composite)
트리구조를 띄는 패턴. 복합객체와 단일체가 동일타입으로 재귀구조를 띄게 됨. 즉 단일체는 마지막 leaf node에 해당한다. 여기서 단일체는 싱글턴을 뜻하는게 아님.
음... 그냥 데이터 자료구조라고 보면됨 DTO같은.. 아무 처리가 없는 단 동일타입이란 동일한인터페이스를 구현해야한다는 소리인데, 자바스크립트는 인터페이스가 없지
그래서 사용할 메서드가 Leaf와 Composite가 동일한 메서드를 사용해야하는 전제조건이 깔림.
클래스다이어그램
구현코드
장식자 (Decorator)
말그대로 객체를 꾸며주는 패턴. 자바에서는 파일 입출력이 예시다. 매개변수로 적절한 객체를 계속 넘김으로써 추가, 추가, 추가를 계속 진행한 후 최종 데이터를 받아내는 패턴
클래스다이어그램
구현코드
퍼사드 (Facade)
서브시스템의 복잡성을 단순화 시켜서 추상화수준을 한단계 올려서 제공하는 패턴.
한번 래핑된 클래스가 사용자측에서 사용이 된다.
클래스다이어그램
js
java
구현코드
플라이웨이트 (Flyweight)
동일한 것을 공유해서 낭비 없애기
인스턴스 1개만 가지고 여러개의 가상인스터스를 제공하고 싶은 경우
싱글턴과 비슷한 맥락인데, 확장 및 응용된 개념 여기서는 prototype 이용을 목적으로 하는거 같은데 예시가 적절해 보이지 않음.
클래스다이어그램
구현코드
프록시 (Proxy)
기본적인 개념은 대리자역할 이다. 원본 어떤 객체의 인스턴스가 생성되는게 부담되는 경우, 어떤 특정 메서드가 호출되는 시점전까지
이 프록시라는 객체의 인스턴스를 생성하여 실행하다가 원본 객체만 할 수 있는 (무게가 있는, 어려운 등등) 메서드가 호출 되는 시점에 원본 객체의 인스턴스를 생성하게 해주는 패턴.(lazy loading)
lazy loading을 효율적을 활용한 패턴이라고 생각 됨.
클래스다이어그램
구현코드
Last updated
Was this helpful?