[Spring] 디자인 패턴 간단 요약

WOOK JONG KIM·2022년 10월 25일
0
post-thumbnail

디자인 패턴이란?

소프트웨어 설계 시 자주 발생하는 문제들을 해결하기 위해 고안된 해결책

모듈의 세분화된 역할이나 모듈들 간의 인터페이스 구현 방식을 설계할때 참조할 수 있는 전형적인 해결 방식

상황에 맞는 최적 패턴을 결정해서 사용하는 것이 바람직

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

아키텍쳐 패턴은 디자인 패턴보다 상위 수준의 설계에 사용된다.

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

컴포넌트 : 재사용이 가능한 독립된 모듈

모듈 : 패키지의 상위 개념(패키지 모음), 하나의 완전한 기능 수행

GOF 디자인 패턴 분류

생성 패턴: 객체의 생성에 사용되는 패턴으로, 객체를 수정해도 호출부가 영향받지 않도록 함

구조 패턴 : 객체를 조합해서 더 큰 구조를 만드는 경우

행위 패턴 : 객체 간의 알고리즘이나 책임 분배에 관한 패턴

-> 객체 하나로는 수행할 수 없는 작업을 여러 객체를 이용하여 분배하는데 이때 결합도를 최소화 해야 함

생성 패턴

  1. Factory Method : 객체 생성을 서브클래스로 분리해서 위임하는 패턴

  2. Abstract Factory : 구체적은 클래스를 지정하지 않고 상황에 맞는 객체를 생성하기 위해 인터페이스를 제공하는 패턴

  3. Builder : 객세의 생성과 표현을 분리해 객체를 생성하는 패턴

  4. ProtoType : 원본 객체를 복사 해 객체를 생성하는 패턴

  5. Singelton : 한 클래스마다 인스턴스를 하나만 생성해서 인스턴스가 하나임을 보장하고 어느곳에서도 접근할 수 있게 제공하는 패턴

구조 패턴

  1. Adapter : 클래스의 인터페이스를 의도하는 인터페이스로 변환하는 패턴

  2. Bridge : 추상화와 구현을 분리해서 각각 독립적으로 변형케 하는 패턴

  3. Composite : 여러 객체로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없디 다루는 패턴

  4. Decorator : 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 하는 패턴

  5. Facade : 서브시스템의 인터페이스 집합들에 하나의 통합된 인터페이스를 제공하는 패턴

  6. Flyweight : 특정 클래스의 인스턴스 한 개를 가지고 여러 개의 가상 인터스를 제공할 때 사용하는 패턴

  7. Proxy : 특정 객체를 직접 참조하지 않고 해당 객체를 대행(프락시)하는 객체를 통해 접근 하는 패턴

행위 패턴

  1. Interpreter : 주어진 언어의 문법을 위한 표현 수단을 정의하고 해당 언어로 구성된 문장을 해석하는 패턴

  2. Template Method : 일정 작업을 처리하는 부분을 서브클래스로 캡슐화해서 전체 수행 구조는 바꾸지 않으면서 특정 단게만 변경해서 수행하는 패턴

  3. Chain of Responsbility : 요청 처리 객체를 집합으로 만들어 결합을 느슨하게 만드는 패턴

  4. Command : 실행될 기능을 캡슐화해서 주어진 여러 기능을 실행하도로고 클래스를 설계하는 패턴

  5. Iterator : 내부 구조를 노출하지 않으면서 해당 객체의 집합 원소에 순차적으로 접근하는 방법을 제공하는 패턴

  6. Mediator : 한 집합에 속한 객체들의 상호작용을 캡슐화하는 객체를 정의한 패턴

  7. Memento : 객체의 상태 정보를 저장하고 필요에 따라 상태를 복원하는 패턴

  8. Observer : 객체의 상태 변화를 관찰하는 관찰자, 즉 옵저버 목록을 객체에 등록해 상태가 변할때 마다 메서드 등을 통해 객체가 직접 옵저버에게 통지하게 하는 디자인 패턴

  9. State : 상태에 따라 객체가 행동을 변경하게 하는 패턴

  10. Strategy : 행동을 클래스로 캡슐화해서 동적으로 행동을 바꿀수 있게 하는 패턴

  11. Visitor : 실제 로직을 가지고 있는 객체(visitor)가 로직을 적용할 객체(element)를 방문하여 실행하는 패턴

profile
Journey for Backend Developer

0개의 댓글