본문 바로가기
SW

GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 4장 구조 패턴

by 라꾸스떼(YR) 2020. 4. 24.
반응형

[Chapter 4.구조 패턴(Structural Pattern)]

구조 패턴은 더 큰 구조를 형성하기 위해 어떻게 클래스와 객체를 합성하는가와 관련된 패턴이다. 구조 클래스 패턴은 상속 기법을 이용하여 인터페이스나 구현을 복합한다. 이 패턴은 서로 독립적으로 개발한 클래스 라이브러리를 마치 하나인 양 사용할 필요가 있을 때 매우 유용한 방법이다. 한 가지 예가 적응자 패턴을 사용한 클래스 형태이다. 일반적으로 적응자는 어떤 인터페이스가 다른 인터페이스를 따르게 만들어 서로 다른 인터페이스들의 통일된 추상을 제공한다. 이를 가능하게 하려고, 적응자 클래스는 적응 대상 클래스(adaptee)에서 특성들을 상속받아, 적응 대상자에 정의된 인터페이스를 마치 자신이 제공하는 것처럼 보여준다.

구조 객체 패턴은 인터페이스나 구현을 복합하는 것이 아니라 새로운 기능을 실현하기 위해 객체를 합성하는 방법을 제공한다. 객체 합성이 갖는 추가된 유연성은 런타임에 복합 방법이나 대상을 변경할 수 있다는 점에서 나온다.

복합체 패턴은 두 종류의 객체에 대한 클래스(기본 클래스와 복합 클래스)로 클래스 계층 구조를 어떻게 형성하는지 보여준다. 복합 객체는 기본 객체와 또 다른 복합 객체를 모아서 임의의 복잡한 구조를 생성할 수 있도록 한다. 프록시 패턴에서 프록시는 다른 객체의 대리자(Surrogate) 역할을 수행한다. 원격지에서 떨어져 있는 객체에 대한 지역 객체로서 동작할 수도 있고, 또 요청이 있을 때마다 필요한 만큼 객체를 처리하는 대상이 될 수도 있다. 프록시를 통해 객체의 특정한 어떤 특성에 대해서는 직접 접근하지 못하게 함으로써 이 특성들을 아무 부담 없이 수정하고, 확장할 수 있게 된다.

플라이급 패턴은 객체들을 공유할 수 있는 구조를 정의한다. 객체의 공유가 필요한 이유는 효율성과 일관성 보장 때문이다. 플라이급 패턴의 목적은 효율적으로 공간을 활용하려고 객체를 공유하는 것이다. 모든 객체를 다 복사하는 것보다는 객체를 공유함으로써 실질적 비용 절감의 효과를 거둘 수 있다. 그러나 객체 공유는 주변 환경에 종속적인 상태가 정의되어 있지 않을 때만 가능하다. 플라이급 객체를 사용하면서 추가적으로 필요한 정보가 있다면 그때 그때 플라이급 객체에 전달해 주어야 한다.

플라이급 패턴이 “적은 객체를 여러 번 이용할 수 있도록 할 것인가”를 고민한 패턴이라면, 퍼사드 패턴은 “하나의 객체로 전체 서브시스템을 표현할 수 있을까”를 고민한 패턴이다. 퍼사드는 여러 객체를 대표하는 객체로서, 자신이 받은 메시지를 자신이 대표하고 있는 다른 객체에 전달하는 역할을 수행한다.

가교 패턴은 객체의 개념적 추상화와 구현을 분리하여 각각 독립적으로 다양하게 변형할 수 있게 해준다.

장식자 패턴은 객체에 동적으로 새로운 책임을 추가할 수 있는 방법을 제공한다. 객체를 재귀적으로 합성하여 책임을 계속적으로 추가할 수 있도록 허용하는 구조 패턴이다.

반응형

댓글