디자인 패턴

차동준·2022년 7월 12일
5

CS-디자인패턴

목록 보기
2/16
post-thumbnail

👨‍💻 디자인 패턴(Design Pattern)이란?

프로그램을 설계할 때 발생했던 문제점들을
객체 간의 상호 관계 등을 이용하여 해결할 수 있도록
하나의 규약형태로 만들어 놓은 것으로

문제점을 해결한 경험을 재사용하기 위해
하나의 패턴으로 만들어 놓은 것을 말한다.



🔎 디자인 패턴의 구조


콘텍스트(Context) 문제(Problem) 해결(Solution)
패턴 적용이 가능한 상황
(문제가 발생할 수 있는 상황)
설계적인 문제 & 이슈 문제를 해결할 수 있는
객체 간의 상호 관계 등
구체적이지 않은 방법



🔎 디자인 패턴의 3가지 분류


1. 생성(Creational) 패턴

인스턴스(객체) 생성과 관련된 패턴
클래스의 구현과 조합을 캡슐화를 통해
특정 객체가 생성되거나 변경되어도
프로그램 구조에 영향을 크게 받지 않도록
유연성을 제공하는 패턴

2. 구조(Structural) 패턴

더 큰 구조를 만들기 위한 패턴

3. 행위(Behavioral) 패턴

객체들의 상호작용과 관련된 패턴
클래스 혹은 객체의 책임 분배, 기능 분리를 통해
객체들 사이의 의존성 및 결합성을 낮추는 패턴



🔎 디자인 패턴의 2가지 범위


1. 클래스

클래스 간 상속 관계를 다루는 패턴

2. 객체

객체를 다루는 패턴



🔎 실무에 자주 쓰이는 14가지 GoF 디자인 패턴(Feat. 헤드퍼스트 디자인 패턴)


  1. 전략(Strategy) 패턴
  2. 옵저버(Observer) 패턴
  3. 데코레이터(Decorator) 패턴
  4. 팩토리(Factory) 패턴
  5. 싱글턴(Singleton) 패턴
  6. 커맨드(Command) 패턴
  7. 어댑터(Adapter) 패턴
  8. 퍼사드(Facade) 패턴
  9. 템플릿 메서드(Template Method) 패턴
  10. 반복자,(Iterator) 패턴
  11. 컴포지트(Composite) 패턴
  12. 상태(State) 패턴
  13. 프록시(Proxy) 패턴
  14. 복합 패턴

🔎 GoF의 23가지 디자인 패턴


1. 생성

  1. Factory Method

인스턴스 객체 생성을 자식(서브)클래스에서 생성하도록 하는 패턴

  1. Abstract Factory

서로 관련이 있는 객체들을 묶어서 팩토리 클래스로 만드는 패턴

  1. Builder

복잡한 객체를 생성하는 클래스와
표현하는 클래스를 분리하여
서로 다른 표현도 같은 절차를 통해 생성할 수 있게 만드는 패턴
생성해야 하는 객체가 Optional할 때(선택지가 많을 때) 유리

  1. Prototype

객체 생성에 많은 비용과 시간이 들고
비슷한 객체가 이미 있는 경우
해당 객체를 복사해서 필요에 맞게 수정하는 패턴

  1. Singleton

인스턴스가 오직 1개만 생성되는 패턴

2. 구조

  1. 어댑터(Adapter) 패턴

어떠한 인터페이스를 사용할 수 없는 객체에
해당 인터페이스를 사용할 수 있는 어댑터 클래스를 만들어
사용 가능하게 하는 패턴

  1. 브릿지(Bridge) 패턴

구현부와 추상부를 분리하여
독립적으로 변형과 확장이 가능하게 하는 패턴

  1. 컴포지트(Composite) 패턴

객체들의 관계를 트리 구조로 구성하여
부분-전체 계층을 표현하는 패턴
사용자가 단일 객체와 복합 객체 모두
동일하게 다루도록 한다.

  1. 데코레이터(Decorator) 패턴

객체 결합을 통해서
기능을 동적으로 유연하게 확장할 수 있게 해주는 패턴

  1. 퍼사드(Facade) 패턴

여러 기능들의 공통적인 기능을 정의하는
단순화된 상위 수준의 인터페이스를 정의하는 패턴

  1. 플라이웨이트(Flyweight) 패턴

인스턴스 한 개만을 가지고
여러 개의 가상 인스턴스를 제공하는 패턴

  1. 프록시(Proxy) 패턴

객체를 직접적으로 참조하는게 아니라
프록시 객체를 이용해 접근하는 패턴

3. 행위

  1. 인터프리터(Interpreter) 패턴

자주 등장하는 코드 규칙들을 간단한 언어로 정의하는 패턴
(ex. SQL 문법)

  1. 템플릿 메서드(Template Method) 패턴

어떠한 작업의 변경을 서브클래스로 캡슐화 해서
전체적인 구조를 바꾸지 않으면서 재정의하는 패턴

  1. 연쇄 책임(Chain of Responsibility) 패턴

어떠한 요청을 처리하는데 필요한 객체들을
집합(Chain)으로 만들어 느슨한 결합을 부여하는 패턴

  1. 명령(Command) 패턴

기능들을 캡슐화함으로써 여러 이벤트를 실행할 수 있는 패턴

  1. 반복자(Iterator) 패턴

반복자를 사용하여 요소에 접근하는 패턴

  1. 중재자(Mediator) 패턴

클래스 간의 관계들을 캡슐화하여
하나의 클래스에서 관리하도록 처리하는 패턴

  1. 메멘토(Memento) 패턴

객체의 상태 정보를 저장하고
사용자의 필요에 의해 원하는 시점에
데이터를 복원할 수 있는 패턴

  1. 옵저버(Observer) 패턴

어떤 객체의 상태가 변할 때
연관된 객체들에게 알림을 보내는 패턴

  1. 상태(State) 패턴

상태에 따라 달라지는 행위를
직접 호출하는 것이 아닌
상태를 객체화하여 상태가 행위를 할 수 있도록 위임하는 패턴

  1. 전략(Strategy) 패턴

객체가 할 수 있는 행위들을 전략 클래스로 생성하고
이 행위들을 캡슐화하는 인터페이스를 정의하여
동적으로 객체의 행위를 바꾸는 패턴

  1. 방문자(Visitor) 패턴

알고리즘을 객체에서 분리해서
객체에 방문하는 방문자에 따라 방문자에게 행위를 위임하여
구조는 변경하지 않은 채 새로운 행위를 추가할 수 있는 패턴

profile
백엔드를 사랑하는 초보 개발자

0개의 댓글