Programming/Design pattern (22) 썸네일형 리스트형 [Design pattern] 커맨드(Command) 패턴 커맨드(Command) 패턴Command 패턴은 요청을 객체로 캡슐화하여, 요청에 필요한 모든 정보를 담아 호출자(Invoker)와 수신자(Receiver)를 분리하는 디자인 패턴입니다. 이 패턴을 사용하면 명령을 큐잉, 로깅, 취소(Undo) 같은 기능도 쉽게 확장할 수 있습니다.Command 패턴은 다음과 같은 경우에 사용할 수 있습니다.실행할 명령을 매개변수화하고 싶을 때명령을 큐에 저장하거나 로그로 기록하고 싶을 때실행 취소(Undo)/재실행(Redo) 기능을 구현하고 싶을 때호출자와 수신자 간의 결합을 느슨하게 만들고 싶을 때커맨드(Command) 패턴 구성요소 1. Command (명령 인터페이스)실행될 명령을 선언하는 인터페이스. execute() 메서드가 핵심 2.ConcreteComman.. [Design pattern] 옵저버(Observer) 패턴 옵저버(Observer) 패턴 Observer 패턴은 객체의 상태 변화를 관찰자(Observer)에게 자동으로 통보하는 디자인 패턴을 말합니다.한 객체의 상태에 변화가 일어나면 그 객체에 등록된 여러 관찰자들에게 알림을 보내서 일관성있게 동작하게 해줍니다.Observer 패턴은 다음과 같은 경우에 사용됩니다.한 객체의 상태 변화를 여러 다른 객체가 알아야 할 때느슨한 결합을 유지하면서 이벤트 기반 통신을 구현하고자 할 때MVC 패턴에서 View가 Model의 변경을 자동으로 반영해야할 때옵저버(Observer) 패턴 구성요소1. Subject상태를 관리하고 Observer를 등록·제거 ·알림하는 인테페이스 정의2. ConcreteSubject실제 상태를 가지고 있는 클래스, 상태가 변하면 Observer.. [Design pattern] 전략(Strategy) 패턴 전략(Strategy) 패턴전략 패턴은 행위를 각각의 전략(Strategy) 클래스로 캡슐화하여, 런타임에 알고리즘을 자유롭게 바꿀수 있도록 해주는 디자인 패턴을 말합니다.즉 행위(Behavior)를 객체화하고, 실행 중에 교체 가능하도록 설계하는 패턴입니다.전략 패턴은 아래와 같은 경우에 사용합니다.알고리즘(로직)이 여러개 존재하고, 상황에 따라 동적으로 교체해야할 때조건문이 많고 각 분기마다 알고리즘이 다른 경우실행 중에 알고리즘을 바꾸고 싶을 때전략(Strategy) 패턴 구성요소전략 패턴은 다음과 같이 구성됩니다.1. Strategy(전략 인터페이스)알고리즘에 공통으로 적용되는 인터페이스 정의2. ConcreteStrategy (구체 전략 인터페이스)Stragety를 구현한 실제 알고리즘3. Co.. [Design pattern] 프록시(Proxy)패턴 프록시(Proxy) 패턴 프록시(Proxy) 패턴은 다른 객체에 대한 접근을 제어하거나 감싸서 기능을 추가하는 구조적 패턴입니다.즉, 진짜 객체 앞에 대리 객체를 두어 대신 동적하거나, 조건부로 실행을 제어하는 패턴입니다.프록시 패턴은 다음과 같은 경우에 사용됩니다.무거운 객체의 지연 로딩이 필요할 때접근제어를 붙이고 싶을 때로깅, 캐싱, 트래픽 제한 등 부가 기능을 추가하고 싶을 때프록시 패턴은 다음과 같은 요소로 구성되어 있습니다. Subject (주제, 인터페이스)프록시와 실제 객체가 공통으로 구현해야할 인터페이스입니다.클라이언트는 이 인터페이스를 통해 객체를 조작합니다.클라이언트 입장에서 프록시인지 본체인지 알 필요 없이 일관되게 사용할 수 있게 해줍니다. RealSubject(실제 객체)실제로 .. [Design pattern] 플라이웨이트(Flyweight)패턴 플라이웨이트(Flyweight) 패턴플라이웨이트 패턴은 동일하거나 유사한 객체들 사이에 가능한 많은 데이터들을 서로 공유하여 사용하도록 하여 메모리 사용량을 최소화하는 디자인 패턴입니다.플라이웨이트 패턴은 아래와 같은 경우에 사용합니다.같은 속성을 가진 객체가 반복적으로 만들어 질 때이미지, 폰트, 게임 캐릭터 등 대량의 객체를 생성해야하는 경우데이터 중 일부만 변경되고 대부분 공통 속성을 공유할 수 있을 때플라이웨이트 패턴은 다음과 같은 요소로 이루어져있습니다.Flyweight (공유 객체)자주 바뀌지 않는 공통 속성을 저장하는 객체입니다.여러 객체들이 공유해서 사용하는 대상입니다. Flyweight Factory공유 객체를 생성하고 캐싱하는 클래스입니다.요청이 들어오면 캐시에 동일할 객체가 있는지 확.. [Design pattern] 퍼사드(Facade)패턴 퍼사드(Facade) 패턴퍼사드(Facade) 패턴은 복잡한 서브시스템의 내부 구현을 감추고, 외부에서는 간단한 인터페이스 하나만 제공하는 구조 패턴입니다. 쉽게 말해 복잡한 시스템을 감추고, 단순하게 사용할 수 있게 해주는 ‘외벽’ 같은 클래스라고 보면 됩니다.퍼사드 패턴은 다음과 같은 경우에 사용합니다.클라이언트가 내부 구조를 몰라도 기능을 편하게 사용할 수 있게 하고 싶을 때여러 모듈/클래스의 조합을 하나의 단일 진입점으로 묶고 싶을 때라이브러리나 레거시 시스템의 사용법이 복잡할 때 간단한 인터페이스를 덧씌우기 위해퍼사드(Facade) 패턴 예제비디오스트리밍 시스템을 시나리오로 퍼사드 패턴에 대해 간단하게 알아보도록 하겠습니다.동영상을 재생하기 위해서는 실제로는 디코더, 버퍼, 오디오/비디오 동기화.. [Design pattern] 데코레이터(Decorator) 패턴 데코레이터(Decorator) 패턴데코레이터(Decorator) 패턴은 기존 객체를 변경하지 않고 런타임에 동적으로 기능을 추가할 수 있게 하는 구조패턴입니다. 데코레이터 패턴은 다음과 같은 경우에 사용합니다.기존 클래스를 수정하지 않고 기능을 확장하고 싶을 때클래스 수가 너무 많아지는 상속 방식 대신 조합을 쓰고 싶을 때여러 기능을 동적으로 조합하고 싶을 경우 데코레이터 패턴은 위와 같은 핵심 구성요소로 나뉘어져 있습니다.각각의 요소에 대해 설명하자면 아래와 같습니다.Component : 모든 객체가 따라야 할 기본 기능을 정의하는 인터페이스, 데코레이터와 컴포넌트가 이를 구현함ConcreteComponent : 기본 기능을 실제로 구현하는 개체Decorator : 데코레이터 인터페이스, 새로운 기능을.. [Design pattern] 컴포지트(Composite) 패턴 컴포지트(Composite) 패턴컴포지트(Composite)패턴은 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 형태로 개별 객체와 복합 객체를 동일하게 다룰 수 있도록 만드는 구조 패턴입니다. 컴포지트 패터은 다음과 같은 경우에 사용합니다.트리 구조(예: 파일/디렉토리, 조직도, 메뉴 구조)를 다룰 때단일 요소와 복합 요소를 동일한 방식으로 처리해야 할 때재귀적으로 동작하거나 계층적인 처리를 구현할 때컴포지트 패턴 구조 컴포지트 패턴은 3가지 구성 요소로 이루어져있습니다.Component Leaf와 Composite 모두가 구현해야할 공통 메소드들을 정의함Leaf 하위 요소를 포함하지 않는 가장 기본 단위(실제 객체)Composite다른 Component 객체들을 자식으로 보유하며, .. 이전 1 2 3 다음