소프트웨어 디자인 패턴

소프트웨어 디자인 패턴()은 소프트웨어 공학 소프트웨어 디자인의 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다. 소스나 기계 코드로 바로 전환될수 있는 완성된 디자인은 아니며, 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는데에 쓰이는 서술이나 템플릿이다. 디자인 패턴은 프로그래머가 애플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는데에 쓰이는 형식화 된 가장 좋은 관행이다.

 역사 
건축적 개념으로서의 패턴은 크리스토퍼 알렉산더(1977/79)가 창안하였다. 1987년, 켄트 벡과 워드 커닝햄은 프로그래밍, 구체적으로는 패턴 언어에 패턴을 적용하는 개념에 관한 실험을 시작했으며 그 해 OOPSLA 콘퍼런스에서 자신들의 결과를 제시하였다., "Ward cautioned against requiring too much programming at, what he termed, 'the high level of wizards.' He pointed out that a written 'pattern language' can significantly improve the selection and application of abstractions. He proposed a 'radical shift in the burden of design and implementation' basing the new methodology on an adaptation of Christopher Alexander's work in pattern languages and that programming-oriented pattern languages developed at Tektronix has significantly aided their software development efforts." 그 뒤 여러 해에 걸쳐 벡과 커닝햄 등은 이 작업을 계속 진행하였다.

디자인 패턴은 이른바 사인방(Gang of Four)이 쓴 Design Patterns: Elements of Reusable Object-Oriented Software라는 책이 1994년 출판된 이후 인기를 끌었다.

 분류 및 목록 
디자인 패턴은 원래 여러 분류로 그룹화되었다: 생성 패턴, 구조 패턴, 행동 패턴.

 생성 패턴 
 이름 《디자인 패턴》에서 《코드 컴플리트》에서 기타 추상 팩토리    빌더    의존성 주입    팩토리 메서드    지연된 초기화    멀티턴    객체 풀    프로토타입    자원의 획득은 초기화이다(Resource Acquisition Is Initialization, RAII)    싱글턴   

 구조 패턴 
 이름 《디자인 패턴》에서 《코드 컴플리트》에서 기타 어댑터, 래퍼(Wrapper), 변환기(Translator)    브리지    컴포지트    데코레이터    확장 객체(Extension object)    퍼사드    플라이웨이트    프론트 컨트롤러    마커    모듈    프록시    트윈   

 행동 패턴 
 이름 《디자인 패턴》에서 《코드 컴플리트》에서 기타 블랙보드    책임 연쇄    커맨드    인터프리터    반복자    중재자    메멘토    널 객체    옵서버 또는 발행-구독 모델    서번트    사양(Specification pattern)    상태    전략    템플릿 메소드    비지터   

 동시성 패턴 
 이름 《POSA2》에서 기타 액티브 오브젝트   Balking   바인딩 속성   컴퓨트 커널   더블 체크 라킹(Double checked locking)   이벤트 기반 비동기   가디드 서스펜션(Guarded suspension)   조인   락   메시징 디자인 패턴 (MDP)   모니터 객체   반응자   읽기-쓰기 락   스케줄러   스레드 풀   스레드 특화 스토리지  

 같이 보기 
 디자인 패턴 (책)

 각주 


분류:소프트웨어 개발