글 작성자: 취업중인 피터팬
728x90

정보처리기사 내용을 쭉 보다가 디자인 패턴 부분이 흥미로워서 공부를 좀 더 해보기로 했습니다.

 

공부하는 김에 블로그에 정리해 놓으면 나중에 내가 찾아보기도 편하고 추가로 정리도 되니 블로그를 이용해서 공부해 보도록 하겠습니다.

 

 

 

 

디자인 패턴?

 

디자인 패턴은 처음 논문 "Using Pattern Languages for Object-Oriented Programs" (1987)을 통해 제안되었습니다.

이후 큰 유명세를 타게 된 것은 23개의 패턴을 수록한 'Design Patterns: Elements of Reusable Object-Oriented Software. (1995)입니다. 

이 분야의 사인방(Gang of Four, 줄여 GoF)으로 불리는 에리히 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시데스(John Vlissides)가 같이 썼고, 한국어 판은 김정아의 번역으로 피어슨 에듀케이션 코리아를 통해 출판되었습니다.

 

그래서 그 갱이 주장한 디자인 패턴이 도대체 무엇인가?

소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책입니다.

디자인 패턴은 알고리즘과 혼동되는 경우가 많은데 둘 다 문제를 해결하는데 목적이 있기 때문에 헷갈리기 쉽습니다.

알고리즘은 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 정의하지만, 패턴은 해결책에 대한 더 상위 수준의 설명입니다. 같은 패턴을 두 개의 다른 프로그램에 적용하면 두 프로그램의 코드는 완전히 다를 것입니다. 알고리즘이 집을 짓기 위한 절차라고 하면 패턴은 청사진과 같은 느낌인 것입니다.

 

 

 

 

 

 

디자인 패턴의 종류

 

 

디자인 패턴은 3가지로 나눠집니다.

 

 

생성패턴

 - 기존 코드의 재활용과 유연성을 증가시키는 객체 생성 메커니즘들을 제공합니다.

  • 팩토리 메서드 패턴 - 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴입니다.
  • 추상 팩토리 패턴 - 관련 객체들의 구상 클래스들을 지정하지 않고도 관련 객체들의 모음을 생성할 수 있도록 하는 생성패턴입니다.
  • 빌더 패턴 - 복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴입니다. 이 패턴을 사용하면 같은 제작 코드를 사용하여 객체의 다양한 유형들과 표현을 제작할 수 있습니다.
  • 프로토타입 패턴 - 코드를 그들의 클래스들에 의존시키지 않고 기존 객체들을 복사할 수 있도록 하는 생성 디자인 패턴입니다.
  • 싱글턴 패턴 - 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근​(액세스) 지점을 제공하는 생성 디자인 패턴입니다.

 

구조 디자인 패턴

- 구조 패턴은 구조를 유연하고 효율적으로 유지하면서 객체들과 클래스들을 더 큰 구조로 조립하는 방법을 설명합니다.

  • 어댑터 패턴 - 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 구조적 디자인 패턴입니다.
  • 브리지 패턴 - 큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조​(추상화 및 구현)​로 나눈 후 각각 독립적으로 개발할 수 있도록 하는 구조 디자인 패턴입니다.
  • 복합체 패턴 - 패턴은 객체들을 트리 구조들로 구성한 후, 이러한 구조들과 개별 객체들처럼 작업할 수 있도록 하는 구조 패턴입니다.
  • 데코레이터 패턴 - 객체들을 새로운 행동들을 포함한 특수 래퍼 객체들 내에 넣어서 위 행동들을 해당 객체들에 연결시키는 구조적 디자인 패턴입니다.
  • 퍼사드 패턴 - 라이브러리에 대한, 프레임워크에 대한 또는 다른 클래스들의 복잡한 집합에 대한 단순화된 인터페이스를 제공하는 구조적 디자인 패턴입니다.
  • 플라이웨이트 패턴 - 각 객체에 모든 데이터를 유지하는 대신 여러 객체들 간에 상태의 공통부분들을 공유하여 사용할 수 있는 RAM에 더 많은 객체들을 포함할 수 있도록 하는 구조 디자인 패턴입니다.
  • 프록시 패턴 - 다른 객체에 대한 대체 또는 자리표시자를 제공할 수 있는 구조 디자인 패턴입니다. 프록시는 원래 객체에 대한 접근을 제어하므로, 당신의 요청이 원래 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 합니다.

 

행동 디자인 패턴

-  알고리즘들 및 객체 간의 책임 할당과 관련이 있습니다.

  • 책임 연쇄 패턴 - 핸들러들의 체인​(사슬)​을 따라 요청을 전달할 수 있게 해주는 행동 디자인 패턴입니다. 각 핸들러는 요청을 받으면 요청을 처리할지 아니면 체인의 다음 핸들러로 전달할지를 결정합니다.
  • 커맨드 패턴 - 요청을 요청에 대한 모든 정보가 포함된 독립실행형 객체로 변환하는 행동 디자인 패턴입니다. 이 변환은 다양한 요청들이 있는 메서드들을 인수화 할 수 있도록 하며, 요청의 실행을 지연 또는 대기열에 넣을 수 있도록 하고, 또 실행 취소할 수 있는 작업을 지원할 수 있도록 합니다.
  • 반복자 패턴 - 컬렉션의 요소들의 기본 표현​(리스트, 스택, 트리 등)​을 노출하지 않고 그들을 하나씩 순회할 수 있도록 하는 행동 디자인 패턴입니다.
  • 중재자 패턴 - 객체 간의 혼란스러운 의존 관계들을 줄일 수 있는 행동 디자인 패턴입니다. 이 패턴은 객체 간의 직접 통신을 제한하고 중재자 객체를 통해서만 협력하도록 합니다.
  • 메멘토 패턴 - 객체의 구현 세부 사항을 공개하지 않으면서 해당 객체의 이전 상태를 저장하고 복원할 수 있게 해주는 행동 디자인 패턴입니다.
  • 옵서버 패턴 - 당신이 여러 객체에 자신이 관찰 중인 객체에 발생하는 모든 이벤트에 대하여 알리는 구독 메커니즘을 정의할 수 있도록 하는 행동 디자인 패턴입니다.
  • 상태 패턴 - 객체의 내부 상태가 변경될 때 해당 객체가 그의 행동을 변경할 수 있도록 하는 행동 디자인 패턴입니다. 객체가 행동을 변경할 때 객체가 클래스를 변경한 것처럼 보일 수 있습니다.
  • 전략 패턴 - 알고리즘들의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그들의 객체들을 상호교환할 수 있도록 하는 행동 디자인 패턴입니다.
  • 템플릿 메서드 패턴 - 부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드​(재정의)​할 수 있도록 하는 행동 디자인 패턴입니다.
  • 비지터 패턴 - 알고리즘들을 그들이 작동하는 객체들로부터 분리할 수 있도록 하는 행동 디자인 패턴입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참조

https://kkungchan.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F 

 

Tistory

좀 아는 블로거들의 유용한 이야기

www.tistory.com

https://y-oni.tistory.com/53

 

GoF(Gang of Four)란? 디자인패턴

GoF(Gang of Four) 란? 《디자인 패턴》(Design Patterns, ISBN 0-201-63361-2)은 소프트웨어 설계에 있어 공통된 문제들에 대한 표준적인 해법과 작명법을 제안한 책이다. 이 분야의 사인방(Gang of Four, 줄여 GoF)

y-oni.tistory.com

https://refactoring.guru/ko/design-patterns/factory-method

 

팩토리 메서드 패턴

/ 디자인 패턴들 / 생성 패턴 팩토리 메서드 패턴 다음 이름으로도 불립니다: 가상 생성자, Factory Method 의도 팩토리 메서드는 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지

refactoring.guru