디자인 패턴이란?

문딤·2022년 7월 12일
0
post-thumbnail

1. 디자인 패턴을 사용하는 이유

공통적인 애플리케이션 설계문제의 해법이다.
보통 객체 생성 및 객체 간 상호 작용 문제를 해결하는데 디자인 패턴을 활용.

💨 패턴은 실전에 바로 적용 가능한 표준적인 틀이라 할 수있다.

💨 다양한 프로그래밍 언어 개발자가 서로 같은 용어를 써서 효과적으로 소통할 수 있게 해준다.

아키텍쳐 패턴 vs 디자인 패턴

  • 아키텍쳐 패턴은 디자인 패턴보다 상위 수준의 설계에 사용된다.
  • 아키텍쳐 패턴이 전체 시스템의 구조를 설계하기 위한 참조 모델이라면,
    디자인 패턴은 서브시스템에 속하는 컴포넌트들끼리의 관계를 설계하기 위한 참조 모델이다.

아키텍쳐 패턴 예시

  • 계층화 패턴
  • 브로커 패턴
  • 파이프 필터 패턴
  • MVC패턴
  • 클라이언트 서버 패턴

2. 디자인 패턴의 3가지 분류와 설명

디자인 패턴 유형

목적과 범위에 따른 구분

🔴 생성 패턴(Creational Pattern)
객체 인스턴스를 생성하는 패턴으로, 클라이언트와 그 클라이언트가
생성해야하는 객체 인스턴스 사이의 연결을 끊어주는 패턴.

🟠 행동 패턴(Behavioral Pattern)
객체들이 상호작용하는 방법과 역활을 분담하는 방법을 다루는 패턴

🟡 구조 패턴(Structural Pattern)
클래스와 객체를 더 큰 구조로 만들 수 있게 구성할 때 사용하는 패턴

3. 디자인 패턴 여러가지

⛔ 생성

1) Builder : 생산 단계를 캡슐화 하여 구축 공정을 동일하게 이용하도록 하는 패턴
2) Prototype : 복사하여 새 개체를 생성할 수 있도록 하는 패턴
3) Factory Method : 객체를 생성하기 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스화 될 것인지는 서브 클래스가 결정하도록 하는 패턴
4) Abstract Method : 생성군들을 하나의 모아놓고 팩토리 중에서 선택하게 하는 패턴
5) Singleton : 유일한 하나의 인스턴스를 보장하도록 하는 패턴

⛔ 구조

1) Bridge : 추상과 구현을 분리하여 결합도를 낮춘 패턴
2) Decorator : 소스를 변경하지 않고 기능을 확장하도록 하는 패턴
3) Facade : 하나의 인터페이스를 통해 느슨한 결합을 제공하는 패턴
4) Flyweight : 대량의 작은 객체들을 공유하는 패턴
5) Proxy : 대리인이 대신 그 일을 처리하는 패턴
6) Composite : 개별 객체와 복합 객체를 클라이언트에서 동일하게 사용하도록 하는 패턴
7) Adapter : 인터페이스로 인해 함께 사용하지 못하는 클래스를 함께 사용하도록 하는 패턴

⛔ 행위

1) Interpreter : 언어 규칙 클래스를 이용하는 패턴
2) Template Method : 알고리즘 골격의 구조를 정의한 패턴
3) Chain of Responsibility : 객체들끼리 연결 고리를 만들어 내부적으로 전달하는 패턴
4) Command : 요청 자체를 캡슐화하여 파라미터로 넘기는 패턴
5) Iterator : 내부 표현은 보여주지 않고 순회하는 패턴
6) Mediator : 객체 간 상호작용을 캡슐화한 패턴
7) Memento : 상태 값을 미리 저장해 두었다가 복구하는 패턴
8) Observer : 상태가 변할 때 의존자들에게 알리고, 자동 업데이트하는 패턴
9) State : 객체 내부 상태에 따라서 행위를 변경하는 패턴
10) Strategy : 다양한 알고리즘 캡슐화하여 알고리즘 대체가 가능하도록 한 패턴
11) Visitor : 오퍼레이션을 별도의 클래스에 새롭게 정의한 패턴

참고

https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS8616098823

https://catsbi.oopy.io/f58693bb-b2aa-4175-a786-a98f42b638c3

https://velog.io/@poiuyy0420/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%A2%85%EB%A5%98

profile
풀스택개발자가 될래요

0개의 댓글