디자인 패턴(구)/구조 패턴 6

프록시(Proxy) 패턴이란?

1. 프록시 패턴이란? 의도 다른 객체에 대한 접근을 제어하기 위핸 대리자 또는 자리채움자 역할을 하는 객체를 다룬다. 즉, 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴이다 proxy를 통해 할 수 있는 일은 두가지로 구분할 수 있다. 접근제어 권한에 따른 접근 차단 캐싱 지연로딩 부가 기능 추가 원래 서버가 제공하는 기능에 더해 부가 기능 수행( 중간에서 변형! 혹은 로그 작동도 가능 ) 즉, 프록시 객체가 중간에 있으면 크게 접근 제어와 부가 기능 추가를 수행할 수 있다. 사용 시기 프록시 패턴은 단순한 포인터보다 조금 더 다방면에서 활용할 수 있거나 정교한 객체 참조자가 필요한 때 적용할 수 있다. 원격지 프록시 : 서로 다른 주소 공간에 존재하는 객체를 가리키는 대표 객체 가상..

퍼사드(FACADE) 패턴이란?

1. 퍼사드 패턴이란? 의도 한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공하는 패턴. 서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의 즉, 복잡한 서브 시스템 의존성을 최소화하는 방법이다. 사실 이게 보면 뭔가... 굉장히 익숙하면서도 크게 어렵지도 않다. 많은 영상과 정보를 찾는 동안에도 모두가 별로 이야기할게 없다고 하긴 했다. 사용 시기 복잡한 서브시스템에 대한 단순한 인터페이스 제공이 필요할 때 추상 개념에 대한 구현 클래스와 사용자 사ㅏ이에 너무 많은 종속성이 존재할 때 서브시스템을 계층화 시킬 때 구조 Facade : 단순하고 일관된 통합 인터페이스를 제공. 서브시스템을 구성하는 어떤 클래스가 어떤 요청을 처리해야 하는지 알고 있으며, 사용자의 요청을 ..

데코레이터 패턴(Decorator Pattern)이란?

1. 데코레이터 패턴 의도 객체에 동적으로 새로운 책임을 추가할 수 있게 한다. 기능을 추가하려면, 서브클래스를 생성하는 것보다 용통성이 있다. 즉, 기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴이다. 상속이 아닌 위임을 사용해서 보다 유연하게(런타임에) 부가 기능을 추가하는 것도 가능하다. 우리가 장식을 생각한다면 장식품을 달아주는 주체는 그 장식(데코레이터)만 추가될 뿐 주체는 여전히 동일하다. (예 : 크리스마스 트리에 장식품이 달려도 트리는 그대로임) 이것처럼 디자인 패턴에서도 이러한 느낌으로 데코레이터 패턴을 고안한게 아닌가 생각이 든다. (내 뇌피셜) 사용 시기 동적으로 또한 투명하게(transparent), 다시 말해 다른 객체에 영향을 주지 않고 개개의 객체에 새로운 책임을 추가하기..

복합체(Composite) 패턴이란?

1. 복합체(Composite) 패턴이란? 의도 부분과 전체의 계층을 표현하기 위해 객체들을 모아 트리 구조로 구성한다. 사용자로 하여금 개별 객체와 복합 객체를 모두 동일하게 다룰 수 있도록 하는 패턴. 그룹 전체와 개별 객체를 동일하게 처리할 수 있다. 클라이언트 입장에서는 전체나 부분이나 모두 동일한 컴포넌트로 인식할 수 있는 계층구조를 만든다. 사용 시기 부분 - 전체의 객체 계통을 표현하고 싶을 때 사용자가 객체의 합성으로 생긴 복합 객체와 개개의 객체 사이의 차이를 알지 않고 자기 일을 할 수 있도록 만들고 싶을 때, 사용자는 복합 구조의 모든 객체를 똑같이 취급 구조 Component : 집합 관계에 정의될 모든 객체에 대한 인터페이스를 정의 Leaf : 가장 말단의 객체. 즉, 자식이 없는..

브릿지(Bridge) 패턴이란?

1. 브릿지 패턴이란? 의도 구현에서 추상을 분리하여, 이들이 독립적으로 다양성을 가질 수 있도록 한다. 즉, 추상적인 것과 구체적인 것을 분리하여 연결하는 패턴이다. 사용 시기 추상적 개념과 이에 대한 구현 사이의 지속적인 종속 관계를 피하고 싶을 때 추상적 개념과 구현 모두가 독립적으로 서브클래싱을 통해 확장되어야 할 때 추상적 개념에 대한 구현 내용을 변경하는 것이 다른 관련 프로그램에 아무런 영향을 주지 않아야 할 때 클래스 계통에서 클래스 수가 급증하는것을 방지하고자 할 때 구조 Abstraction : 추상적 개념에 대한 인터페이스를 제공하고, 객체 구현자에 대한 참조자를 관리 Refind Abstraction : 추상적 개념에 정의된 인터페이스를 확장 Implementor : 구현 클래스에 ..

어탭터(Adaptor) 패턴이란?

1. 어탭터 패턴이란? 의도 클래스의 인터페이스를 사용자가 기대하는 인터페이스 형태로 적응시킨다. 서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킨다. 즉, 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴 사용 시기 기존 클래스를 사용하고 싶은데 인터페이스가 맞지 않을 때 이미 만든 것을 재사용하고자 하나 이 재사용 가능한 라이브러리를 수정할 수 없을 때 이미 존재하는 여러 서브클래스를 사용해야 하는데 서브클래스들의 상속으로 인터페이스를 다 개조하는것이 불가능할 때 구조 Target : 사용자가 사용할 응용 분야에 종속적인 인터페이스를 정의하는 클래스 Client : Target 인터페이스를 만족하는 객체와 동작할 대상 Adapdee : 인터페이스의 적응이 필요한 기존 ..