[1] 디자인 패턴의 대한 정의

2023. 7. 16. 16:36cs및 소프트스킬/디자인 패턴

728x90
반응형
SMALL

1. 디자인 패턴 

  - 주로 객체지향 프로그래밍을 설계 할 때 쓰이는 기법 중 하나로 의사 소통의 일종을 역할

  - 프로그램 설계 시 발생한 문제점들을 객체 간 상호 관계 등 이용하여 해결할 수 있도록 하나의 "규약" 형태

 

 

2. 디자인 패턴의 종류

(1) 생성 패턴(추상 객체 인스턴스화)

  • 추상 팩토리(Abstract Factory) : 각 종 서브 클래스를 특정 그룹으로 묶어 한번에 교체
  • 팩토리(Factory Method) : 객체 생성 후 Return 함수 (생성자 대신) 제공하여 초기화 과정을 외부에 못보게 하여 숨기는 타입
  • 빌더(Builder) : 인스턴스를 생성자를 통해 생성 하지 않고, 빌더에서 내부 클래스를 간접적으로 생성하는 방식
  • 프로토타입 : 원본 만들어 놓고, 원본 객체를 그대로 복사하는 방식
  • 싱글톤(Singleton) : 클래스 내부에서 인스턴스가 단 하나뿐인 메소드 (주로 생성자를 private로 넣고, 메서드를 통해 인스턴스 접근)

 

(2) 구조 패턴(객체 결합)

  • 어댑터(Adapter) : 본인 코드 및 레거시 인터페이스와 타 인터페이스를 연결하는 중계기 역할하는 패턴
  • 브리지(Bridge) : 상위 클래스에서 하위 클래스로 계층적으로 연결하는 클래스 (React에서 컴포넌트를 나눌 때 주로 사용하는 방식)
  • 컴포지트(Composite) : 객체 관계를 트리 구성으로 부분-전체 계층을 표현
  • 데코레이터(Decorator) : 대상 객체의 기능 확장 및 변경 필요시 객체 결합을 통해 서브클래싱을 대신해서 쓸 수 있는 유연한 패턴, 서로 다른 인터페이스 2개를 1개의 인터페이스로 만들어서 표
  • 파사드(Facade) : 복잡한 호출 과정을 대신 처리, 하나의 인터페이스를 하위 인터페이스를 각각 만들어 비슷한 메소드를 다른 메소드를 처리하는 형태
  • 플라이웨이트(Fly Weight) : 내부 클래스의 한개의 인스턴스로 여러개의 가상 인터페이스를 공유할 때 쓰  
  • 프록시(Proxy) : Nginx 에서 각각의 포트 및 URL을 포워딩 한 형태와 유사한 구조로, 다른 무언가와 이어지는 인터페이스이다.

 

(3) 행위 패턴(객체 간 커뮤니케이션)

  • 책임 체인(Chain of Responsibility) : 각각 인스턴스들이 체인처럼 연결되어 있는 형태, 1단계부터 5단계까지 처리 시 인스턴스 단계별로 처리하는 행위를 말한다.
  • 커맨드(Command) : 명령 요청을 객체 형태로 캡슐화 후 사용자가 보낸 요청을 나중에 매개변수 및 메서드 이름 등 필요 정보를 로깅 혹은 저장을 할 수 있음, 하나의 객체가 타 객체의 메소드를 요청을 할 수 있다 (리모컨 제어로 생각)
  • 인터프리터(interpreter) : 반복되는 문제 패턴을 언어 혹은 문법으로 정의하고 확
  • 반복자(iterator) : Java의 Iterator 인터페이스에 적용하는 패턴 중 하나로 각각 반복적인 객체를 Iterator의 인터페이스에 저장된 것을 활용하는 패턴
  • 중재자(Mediator) : 객체안에서 서로 다른 객체들을 캡슐화하여 객체들이 더 이상 직접적으로 상호작용하지않고 중재자를 통해서만 커뮤니케이션함
  • 메멘토(mement) : 객체를 이전 상태로 되돌릴 수 있는 기능을 제공하는 패턴, 롤백을 통한 실행 취소
  • 옵저버(Observer) :  여러 객체들이 하나의 객체를 '관찰'하는 패턴을 만들어 중점이 되는 개체가 변화할 때 그 변화를 연결된 여러 옵저버들에게 전달하는 패턴
  • 상태(State) : 객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게 허가하는 패턴
  • 전략(Strategy) : 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만드는 패
  • 템플릿 메소드(Template Method) : 부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드​(재정의)​할 수 있도록 하는
  • 방문자(visit) : 데이터 구조와 처리를 분리하는 패턴

 

 

 

 

 

 

728x90
반응형
LIST