lala9663
Bump into
lala9663
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (1)
    • Java (39)
    • Spring (28)
    • IntelliJ (7)
    • Git,Github (2)
    • CS (22)
    • Algorithm (23)
      • Algorithm 문제 (13)
    • 공부방 (9)
    • 그 외 (27)
      • TIL (24)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정적
  • thread
  • Java
  • 백준 2292
  • 자바 람다
  • jsp
  • Get
  • 동적
  • 웹 3.0
  • 1193
  • 자바
  • 스트림(Stream)
  • 백준
  • was
  • 웹서버
  • servlet
  • try-catch
  • Til
  • Post
  • 백준 벌집
  • Intellij
  • Spring

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
lala9663

Bump into

GoF 디자인 패턴: 소프트웨어 디자인의 핵심
CS

GoF 디자인 패턴: 소프트웨어 디자인의 핵심

2023. 11. 5. 23:26

GoF(Gang of Four)는 소프트웨어 디자인 패턴에 대한 가장 잘 알려진 참고 자료 중 하나인   

Design Patterns: Elements of Reusable Object-Oriented Software 책의 저자들을 지칭하는 말이다.

  

이 책은 디자인 패턴을 고안하고 문서화하여 소프트웨어 개발 커뮤니티에 널리 알려진 기반을 제공했다. 

 

 

  

GoF는 Erich Gamma, Richard Helm, Ralph Johnson, John Vissides  네 명의 소프트웨어 엔지니어를 말한다.  

 

GoF가 제안한 Design Patterns: Elements of Reusable Object-Oriented Software  책은 1994년 처음 출판되었으며, 객체 지향 소프트웨어 개발에서 디자인 패턴의 중요성을 강조하고 이를 23가지 주요 디자인 패턴으로 문서화했다.  

  

  

 

 

 

 

 

 

 

일반적으로 디자인 패턴은 크게 3가지 범주로 나눌 수 있다.  

 

 

1. 생성 패턴 - 5

  •   생성 패턴은 객체의 생성과 초기화에 관련된 패턴이다. 이러한 패턴은 객체를 어떻게 생성하고 구성할지에 대한 문제를 해결한다.
  •  객체 생성에 대한 패턴/ 캡슐화와 유연성
추상 팩토리 (Abstract Factory) 상위 클래스의 객체 생성코드를 하위클래스가 상속받는다(상위변경=하위자동변경) 
빌더 (Builder) 분리된 인스턴스를 조합하여 객체 생성. 같은 객체를 생성해도 다른 결과를도출할 수 있음
팩토리 메소드 (Factory Method) 객체 생성 코드를 하위클래스에서 구체화. 상위 클래스는 인터페이스만 제공(각각 다른작업수행)
프로토타입(Prototype) 원본을 복제하는 형태로 객체 생성, 비용 저렴
싱글턴(Singleton) 클래스 내 생성되는 인스턴스가 하나만 필요할 때 사용(동시참조X)

 

 

2. 구조패턴 - 7

  •  구조 패턴은 클래스 및 객체의 구조화와 조합에 관련된 패턴이다. 이러한 패턴은 객체 간의 관계를 조직화하고 확장성을 향상시키는데 사용된다.
  •  구조가 복잡한 시스템 개발에 도움을 줄 수 있는 패턴
어댑터(Adapter) 일치하지 않는 인터페이스 변환 (전류 어댑터와 같은 역할)
브릿지(Bridge) 추상층(기능)과 구현층(구체화)을 분리하여 서로 독립적 확장 가능
합성(Composite) 트리구조로 구성
데코레이터(Decorator)  클래스에 기능을 추가하기 위해 다른 객체를 덧붙이는 형태
파사드(Facade)  다수의 서브클래스들의 통합 인터페이스를 제공할 수 있는 Wrapper 객체 구성
플라이웨이트(Flyweight) 다수의 유사 객체 생성이 필요할 때 메모리 절약을 위해 최대한 공유해서 사용하는 형태
프록시(Proxy) 접근이 어려운 객체에 접근할 수 있도록 인터페이스 역할 수행

 

 

3. 행위패턴 - 11

  •  행위 패턴은 객체 간의 상호 작용 및 역할 분배에 관련된 패턴이다. 이러한 패턴은 객체 간의 협력과 상호작용을 개선하고 중복 코드를 줄이는 데 사용된다.
  •  상호작용이나 책임 분배에 대한 부분을 정의하고 결합도는 최소화 하는 것이 목표인 패턴
책임 연쇄(Chain of Responsibility) 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴. 각 객체들이 고리(Chain)으로 묶여있어 요청이 해결될 때까지 고리를 따라 책임이 넘어간다.
커맨드(Command) 명령어를 캡슐화하여 재사용하거나 취소할 수 있도록 필요한 정보를 로그에 남기는 형태
인터프리터(Interpreter) 언어에 문법 표현을 정의하는 패턴
반복자(Iterator) 접근이 잦은 객체는 동일한 인터페이스를 사용하도록 하는 패턴
중재자(Mediator) 상호작용을 캡슐화하여 결합도를 낮추기위해 사용
메멘토(Memento) 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴이다. Ctrl+Z 기능이 이 패턴의 대표적 기능
옵저버(Observer) 이벤트 발행과 구독, 상태 변화 전달. 한 객체의 상태가 변화하면 객체에 상속되어있는 다른 객체들에게 변화된 상태를 전달하는 패턴. 카톡의 읽음표시 같은 느낌
상태(State) 이벤트를 객체 상태에 따라 다르게 처리해야할 때 사용. 카톡 알림설정 같은 느낌
전략(Strategy) 동일 계열 알고리즘 상호 교환, 독립적 사용
템플릿 메소드(Template Method) 상위에서 인터페이스를 정의하고 하위에서 구체화시킴 (유지보수 쉬워짐
방문자(Visitor) 처리 기능을 별도의 클래스로 구성. 분리된 처리 기능은 각 클래스를 방문(Visit)하여 수행한다.

 

 

 

아직 몇개의 패턴들만 프로젝트를 하면서 이해했고 대부분의 패턴들은 모르고 사용했었는데 디자인 패턴은 매우 중요하기 때문에 필수로 알아야 하는 개념이라고 한다.. 

책을 읽으면서 패턴들을 하나씩 정리하면서 블로그에 작성해 채워나가야겠다.

 

 

 

 

 

출처: 

https://y-oni.tistory.com/53

'CS' 카테고리의 다른 글

디자인패턴 - 프로토타입 패턴(Prototype)  (0) 2023.11.19
디자인 패턴 - 전략 패턴(Strategy)  (0) 2023.11.12
CSR 과 SSR 그리고 SPA  (1) 2023.10.28
jOOQ 란  (0) 2023.04.28
DSL 이란  (0) 2023.04.28
    'CS' 카테고리의 다른 글
    • 디자인패턴 - 프로토타입 패턴(Prototype)
    • 디자인 패턴 - 전략 패턴(Strategy)
    • CSR 과 SSR 그리고 SPA
    • jOOQ 란
    lala9663
    lala9663
    초보의 험난한 공부

    티스토리툴바