01. 디자인 패턴 소개

AlmondGood·2022년 7월 12일
0

디자인패턴

목록 보기
2/16

저번 시간에는 객체지향 프로그래밍에 대해 알아 보았습니다. 그럼 배운 객체지향 프로그래밍을 잘 활용할 수 있는 방법도 알아야 겠죠? 이번엔 디자인 패턴입니다. 이번 시간은 간단한 개요만 알아보고 넘어가겠습니다.


디자인 패턴(Design Pattern)

디자인 패턴은 "소프트웨어 설계 시에 공통된 문제들에 대해 오류를 줄이고 성능을 최적화하기 위해 일반적인 해결책을 마련하여 패턴화한 것"을 말합니다.
4인방(Gang of Four)라고 불리는 에리히 감마, 리처드 헬름, 랄프 존슨, 존 블리시디스가 발간한 책 《Design Patterns: Elements of Reusable Object-Oriented Software》(1994)에서 구체적으로 처음 제시되었습니다.

세상에는 엄청나게 많은 개발자가 존재했고, 지금도 존재하죠. 그 사람들이 만들어낸 오류의 양도 어마어마할 겁니다.
하지만 사람들이 겪는 일이 다 비슷하듯이 그들이 경험하는 오류의 형태도 비슷할 것입니다. 이런 노하우들을 모으고 모아 정리해서 해결책을 제시한 것이 바로 "디자인 패턴"입니다.



디자인 패턴의 종류

4인방은 디자인 패턴 책에서 가장 유용하게 사용 가능한 23가지 패턴을 골라 책에 실었습니다. 그 패턴들을 다시 3가지로 분류했습니다.

생성 패턴

객체를 생성하는 것과 관련된 패턴으로, 객체의 생성이나 수정이 시스템에 미치는 영향을 최소화 하도록 합니다.

싱글턴(Singleton) : 전역변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴

  • 프로토타입(Prototype) : 기존 객체를 복제함으로써 객체를 생성하는 패턴
  • 빌더(Builder) : 생성자에 들어갈 매개 변수가 많든 적든 차례차례 매개 변수를 받아들이고 모든 매개 변수를 받은 뒤에 이 변수들을 통합해서 한 번에 사용하는 패턴
  • 팩토리 메소드(Factory Method) : 객체의 생성을 팩토리 클래스로 위임하여 객체를 생성하는 패턴
  • 추상 팩토리(Abstraction Factory) : 팩토리를 추상화해서 관련있는 객체의 집합을 생성할 수 있는 팩토리를 만들고 조건에 따라 팩토리를 생성해서 서로 관련된 객체를 생성하는 패턴

구조 패턴

프로그램 내의 자료구조나 인터페이스 구조 등 프로그램의 구조를 설계하는 데 많이 활용될 수 있는 패턴입니다. 쉽게 말하면 개발하다보면 클래스나 인터페이스가 복잡해지는데, 이를 클래스/인터페이스를 생성 또는 합성해가며 새로운 객체를 만들어 관리하는 패턴입니다.

  • 어댑터(Adapter) : 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환하며, 인터페이스의 호환성 문제 때문에 같이 쓸 수 없는 클래스들도 연결 가능한 패턴
  • 컴포지트(Composite) : 여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴
  • 브릿지(Bridge) : 추상층과 구현부, 서로 다른 계층의 커플링을 약화시키며 협력은 가능하도록 하는 패턴
  • 데코레이터(Decorator) : 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주는 패턴
  • 파사드(Facade) : 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공하며, 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용하는 패턴
  • 플라이웨이트(Flyweight) : 데이터를 공유 사용하여 메모리를 절약할 수 있는 패턴
  • 프록시(Proxy) : 실제 기능을 수행하는 객체 Real Object 대신 가상의 객체 Proxy Object를 사용해 로직의 흐름을 제어하는 디자인 패턴

행위 패턴

반복적으로 사용되는 객체들의 상호작용을 패턴화한 것으로, 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 것입니다.

  • 템플릿 메소드(Template Method) : 상위 클래스에서는 추상적으로 표현하고 그 구체적인 내용은 하위 클래스에서 결정되는 디자인 패턴
  • 인터프리터(Interpreter) : 문법 규칙을 클래스 화 한 구조로써, 일련의 규칙으로 정의된 언어를 해석하는 패턴
  • 반복자(Iterator) : 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있는 방법을 제공하는 패턴
  • 옵저버(Observer) : 어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보해주는 패턴
  • 전략(Strategy) : 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴
  • 방문자(Visitor) : 실제 로직을 가지고 있는 객체(Visitor)로직을 적용할 객체(Element)를 방문하면서 실행하는 패턴
  • 책임연쇄(Chain of Responsibility) : 요청 처리가 들어오게 되면 그것을 수신하는 객체가 자신이 처리할 수 없는 경우에는 다음 객체에게 문제를 넘김으로써 최종적으로 요청을 처리 할 수 있는 객체의 의해 처리가 가능하도록 하는 패턴
  • 커맨드(Command) : 명령어를 각각 구현하는 것보다는 하나의 추상 클래스에 메서드를 하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행하는 것
  • 중재자(Mediator) : 모든 클래스간의 복잡한 로직(상호작용)을 캡슐화하여 하나의 클래스에 위임하여 처리하는 패턴
  • 상태(State) : 객체의 상태에 따라 객체의 행위 내용을 변경해주는 패턴
  • 기념품(Memento) : 객체의 상태 정보를 저장하고 사용자의 필요에 의하여 원하는 시점의 데이터를 복원할 수 있는 패턴



참고자료

위키백과 https://ko.wikipedia.org/wiki/%EB%94%94%EC%9E%90%EC%9D%B8_%ED%8C%A8%ED%84%B4_(%EC%B1%85)

네이버 지식백과
https://terms.naver.com/entry.naver?docId=3532958&cid=58528&categoryId=58528&expCategoryId=58528

profile
Zero-Base to Solid-Base

0개의 댓글