GoF 디자인 패턴 편집하기
IT위키
편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
5번째 줄: | 5번째 줄: | ||
==구분== | ==구분== | ||
====생성 | ====생성(Creational Pattern)==== | ||
*객체를 생성하는데 관련된 패턴들 | *객체를 생성하는데 관련된 패턴들 | ||
*객체가 생성되는 과정의 유연성을 높이고 코드의 유지를 쉽게 함 | *객체가 생성되는 과정의 유연성을 높이고 코드의 유지를 쉽게 함 | ||
====구조 | ====구조(Structural Pattern)==== | ||
*프로그램 구조에 관련된 패턴들 | *프로그램 구조에 관련된 패턴들 | ||
*프로그램 내의 자료구조나 인터페이스 구조 등 프로그램의 구조를 설계하는데 활용할 수 있는 패턴들 | *프로그램 내의 자료구조나 인터페이스 구조 등 프로그램의 구조를 설계하는데 활용할 수 있는 패턴들 | ||
====행위 | ====행위(Behavioral Pattern)==== | ||
*반복적으로 사용되는 객체들의 상호작용을 패턴화 해놓은 것들 | *반복적으로 사용되는 객체들의 상호작용을 패턴화 해놓은 것들 | ||
66번째 줄: | 66번째 줄: | ||
*Visitor | *Visitor | ||
|} | |} | ||
===생성 패턴 | ===생성 패턴=== | ||
;Creational Pattern | |||
==== 팩토리 메소드 ==== | |||
====추상 팩토리 | ;;Factory Method | ||
;*Virtual-Constructor 패턴이라고도 함 | |||
;*객체를 생성하기 위한 인터페이스를 정의 하여 어떤 클래스가 인스턴스화 될 것인지는 서브클래스가 결정 | |||
====추상 팩토리==== | |||
;Abstract Factory | |||
*구체적인 클래스에 의존하지 않고, 서로 연관·의존하는 객체들의 그룹으로 생성하여 추상적으로 표현 | *구체적인 클래스에 의존하지 않고, 서로 연관·의존하는 객체들의 그룹으로 생성하여 추상적으로 표현 | ||
*연관된 서브 클래스를 묶어 한 번에 교체 가능 | *연관된 서브 클래스를 묶어 한 번에 교체 가능 | ||
====빌더 | ====빌더==== | ||
;Builder | |||
*건축가가 블록을 조립하는 모습 | *건축가가 블록을 조립하는 모습 | ||
84번째 줄: | 91번째 줄: | ||
*동일한 객체 생성에서도 다른 결과 나올 수 있음 | *동일한 객체 생성에서도 다른 결과 나올 수 있음 | ||
====프로토타입 | ====프로토타입==== | ||
;Prototype | |||
*원본 객체를 복제하는 방법으로 객체를 생성하는 패턴 | *원본 객체를 복제하는 방법으로 객체를 생성하는 패턴 | ||
*비용이 큰 경우 주로 이용 | *비용이 큰 경우 주로 이용 | ||
====싱글톤 | ====싱글톤==== | ||
;Singleton | |||
*객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조하는 것은 불가능 | *객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조하는 것은 불가능 | ||
*인스턴스가 하나뿐이기 때문에 불필요한 메모리 낭비를 최소화 할 수 있음 | *인스턴스가 하나뿐이기 때문에 불필요한 메모리 낭비를 최소화 할 수 있음 | ||
===구조 패턴 | ===구조 패턴=== | ||
====어댑터 | ;Structural Pattern | ||
====어댑터==== | |||
;Adaptor | |||
*호환성을 맞춰주는 변압기 | *호환성을 맞춰주는 변압기 | ||
102번째 줄: | 117번째 줄: | ||
*기존의 클래스를 이용하고 싶은데 인터페이스가 일치하지 않을 때 사용 | *기존의 클래스를 이용하고 싶은데 인터페이스가 일치하지 않을 때 사용 | ||
====브리지 | ====브리지==== | ||
;Bridge | |||
*두 섬을 연결하는 다리 | *두 섬을 연결하는 다리 | ||
108번째 줄: | 125번째 줄: | ||
*기능과 구현을 별도의 클래스에서 구현 | *기능과 구현을 별도의 클래스에서 구현 | ||
====컴포지트 | ====컴포지트==== | ||
;Composite | |||
*폴더와 파일을 합성한 것 | *폴더와 파일을 합성한 것 | ||
114번째 줄: | 133번째 줄: | ||
*복합 객체 안에 복합 객체가 포함되는 구조 구현 가능 | *복합 객체 안에 복합 객체가 포함되는 구조 구현 가능 | ||
====데코레이터 | ====데코레이터==== | ||
;Decorator | |||
*온갖 것으로 장식된 눈사람 | *온갖 것으로 장식된 눈사람 | ||
120번째 줄: | 141번째 줄: | ||
*부가적인 기능 추가를 위해 다른 객체들을 덧붙이는 방식 | *부가적인 기능 추가를 위해 다른 객체들을 덧붙이는 방식 | ||
====퍼싸드 | ====퍼싸드==== | ||
;Facade | |||
*리모컨만으로 복잡한 명령을 수행하는 것 | *리모컨만으로 복잡한 명령을 수행하는 것 | ||
126번째 줄: | 149번째 줄: | ||
*서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체 필요 | *서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체 필요 | ||
====플라이웨이트 | ====플라이웨이트==== | ||
;Flyweight | |||
*부담을 가볍게 하기 위해 물품 공유 | *부담을 가볍게 하기 위해 물품 공유 | ||
*인스턴스를 가능한 | *인스턴스를 가능한 공유해서 사용하여 메모리를 절약 | ||
*다수의 유사 객체를 생성하거나 조작할 때 유용함 | *다수의 유사 객체를 생성하거나 조작할 때 유용함 | ||
====프록시 | ====프록시==== | ||
;Proxy | |||
*하기 어려운 업무를 대리로 해주는 사람 | *하기 어려운 업무를 대리로 해주는 사람 | ||
138번째 줄: | 165번째 줄: | ||
*네트워크 연결, 메모리의 대용량 객체로의 접근에 이용 | *네트워크 연결, 메모리의 대용량 객체로의 접근에 이용 | ||
===행위 패턴 | ===행위 패턴=== | ||
;Behavioral Pattern | |||
====책임 연쇄==== | |||
;Chain of Responsibility | |||
*연속해서 나눠받는 물레방아 | *연속해서 나눠받는 물레방아 | ||
146번째 줄: | 177번째 줄: | ||
*요청이 해결될 때까지 고리를 따라 책임이 넘어감 | *요청이 해결될 때까지 고리를 따라 책임이 넘어감 | ||
====커맨드 | ====커맨드==== | ||
;Command | |||
*명령어를 하나로 합쳐둔 것 | *명령어를 하나로 합쳐둔 것 | ||
152번째 줄: | 185번째 줄: | ||
*추상클래스와 구체클래스로 나뉨 | *추상클래스와 구체클래스로 나뉨 | ||
====인터프리터 | ====인터프리터==== | ||
;Interpreter | |||
*언어 번역가 | *언어 번역가 | ||
158번째 줄: | 193번째 줄: | ||
*SQL이나 통신 프로토콜에 사용 | *SQL이나 통신 프로토콜에 사용 | ||
====반복자 | ====반복자==== | ||
;Iterator | |||
*같은 명령의 반복 | *같은 명령의 반복 | ||
164번째 줄: | 201번째 줄: | ||
*내부 표현 방법의 노출 없이 순차적인 접근 가능 | *내부 표현 방법의 노출 없이 순차적인 접근 가능 | ||
====중재자 | ====중재자==== | ||
;Mediator | |||
*매매를 중개해주는 중개사이트 | *매매를 중개해주는 중개사이트 | ||
170번째 줄: | 209번째 줄: | ||
*객체 사이의 결합도를 감소시킴 | *객체 사이의 결합도를 감소시킴 | ||
====메멘토 | ====메멘토==== | ||
;Memento | |||
*기억 속의 그 때로 돌아감. | *기억 속의 그 때로 돌아감. | ||
176번째 줄: | 217번째 줄: | ||
*ctrl+z 와 같은 기능 개발시 사용 | *ctrl+z 와 같은 기능 개발시 사용 | ||
====옵서버 | ====옵서버==== | ||
;Observer | |||
*변화를 지켜보고 알려주는 것 | *변화를 지켜보고 알려주는 것 | ||
182번째 줄: | 225번째 줄: | ||
*시스템간에 이벤트를 생성하고 수신할 때 사용 | *시스템간에 이벤트를 생성하고 수신할 때 사용 | ||
====상태 | ====상태==== | ||
;State | |||
*상태에 따라 다른 방법을 사용함 | *상태에 따라 다른 방법을 사용함 | ||
188번째 줄: | 233번째 줄: | ||
*객체 상태를 캡슐화하고 이를 참조함 | *객체 상태를 캡슐화하고 이를 참조함 | ||
====전략 | ====전략==== | ||
;Strategy | |||
*여러 전략을 정하고 필요할 때 선택하여 씀 | *여러 전략을 정하고 필요할 때 선택하여 씀 | ||
194번째 줄: | 241번째 줄: | ||
*원하는 알고리즘을 선택하여 사용하며 클라이언트에 영향 없이 알고리즘 변경 가능 | *원하는 알고리즘을 선택하여 사용하며 클라이언트에 영향 없이 알고리즘 변경 가능 | ||
====템플릿 메소드 | ====템플릿 메소드==== | ||
;Template Method | |||
*방법들을 큰 틀로 묶는 것 | *방법들을 큰 틀로 묶는 것 | ||
200번째 줄: | 249번째 줄: | ||
*유사한 서브 클래스의 공통된 내용을 상위 클래스에서 정의(유지보수를 용이하게 함) | *유사한 서브 클래스의 공통된 내용을 상위 클래스에서 정의(유지보수를 용이하게 함) | ||
====방문자 | ====방문자==== | ||
;Visitor | |||
*책을 만들기 위해 저자, 편집자를 번갈아가며 방문 | *책을 만들기 위해 저자, 편집자를 번갈아가며 방문 | ||
*각 클래스들의 데이터 구조에서 처리 기능을 별도의 클래스로 구성 | *각 클래스들의 데이터 구조에서 처리 기능을 별도의 클래스로 구성 | ||
*분리된 기능은 각 클래스를 방문하여 수행 | *분리된 기능은 각 클래스를 방문하여 수행 | ||
<references /> | <references /> |