728x90

 

01. 디자인 패턴이란?


디자인 패턴

  • 자주 사용하는 설계 패턴을 정형화하여 유형별로 최적의 방법으로 개발할 수 있도록 정해둔 설계이다.
  •  알고리즘과 유사하지만 명확하게 정답이 있는 형태는 아니다.
  • 프로젝트 상황에 맞추어 적용하면 된다.

 

 

Gof 디자인 패턴 

  •  GoF(Gang of Four)의 디자인 패턴이라고 한다.
  • 객체지향 개념에 따른 설계 중 재사용 시 유용한 설계를 디자인 패턴으로 정리한 것이다.
  • Gof의 디자인 패턴은 총 23개이다.

 


디자인 패턴의 장점

  • 개발자 간의 원활한 소통이 가능하다.
  • 소프트웨어 구조 파악에 용이하다.
  • 재사용을 통한 개발 시간 단축이 가능하다.
  • 설계 변경 요청에 대한 유연한 대처가 가능하다.

 


디자인 패턴의 단점

  • 초기 투자 비용이 부담될 수 있다.

 

 


 

 

 

02. 생성 패턴, 구조 패턴, 행위 패턴

 

총 23개의 패턴을 목적에 따라 분류하여 3가지의 패턴으로 나눴다.

 


생성 패턴

  • 객체를 생성하는 것과 관련된 패턴이다.
  • 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하는 것을 목적으로 한다.
  • 코드의 유연성을 높여준다.
  • 생성 패턴으로는 Factory Method, Singleton, Prototype, Builder, Abstract Factory, Chaining 이 있다.



구조 패턴

  • 프로그램 내 자료구조/인터페이스 구조 등 프로그램 구조를 설계하는 데 활용 가능한 패턴이다.
  • 클래스, 객체들의 구성을 통해 더 큰 구조 만들기가 가능하다.
  • 큰 규모의 시스템은 복잡한 구조를 가지는데, 이러한 구조를 개발/유지보수가 쉽게 만들어 준다.
  • 구조 패턴으로는 Adapter, Composite, Bridge, Decorator, Facade, Flyweight, Proxy 가 있다.



행위 패턴

  • 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것이다.
  • 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 제공한다.
  • 독립적으로 일을 처리하고자   사용한다.
  • 행위 패턴으로는 Template Method, Interpreter, Iterator, Observer, Strategy, Visitor, Chain of responsibility, Command, Mediator, State, Memento 가 있다.

 

 


 



03. Singleton Pattern

  • 어떠한 클래스(객체)가 유일하게 1개만 존재할 때 사용한다.
  • 서로 자원을 공유할 때 사용한다.
  • 실세계에서의 프린터를 예시로 생각하면 편하다.
  • 실제 프로그래밍에서는 TCP socket 통신에서 서버와 연결된 connect 객체에 주로 사용한다.

 

 





04. Adapter Pattern

  • 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용을 가능케 한다.
  • SOLID 중에서 개방 폐쇄 원칙(OCP)을 따른다.
  • 예시로 변환기를 생각하면 된다. (110V to 220V 혹은 220V to 110V)

 

 


 



05. Proxy Pattern

  • 무언가를 대신해서 처리하는 것, 즉 대리인이라고 생각하면 된다.
  • Proxy Class를 통해서 대신 전달하는 형태로 설계한다.
  • 실제 Client는 Proxy로부터 결과를 받는다.
  • Cache의 기능으로도 활용이 가능하다.
  • SOLID 중에서 개방 폐쇄 원칙(OCP)와 의존 역전 원칙(DIP)을 따른다.

 

 





06. Decorator Pattern

  • 기존 뼈대(클래스)는 유지하되, 이후 필요한 형태로 꾸밀 때 사용한다.
  • 확장 필요 시 상속의 대안으로도 활용이 가능하다.
  • SOLID 중에서 개방 폐쇄 원칙(OCP)와 의존 역전 원칙(DIP)을 따른다.

 

 





07. Observer Pattern

  • 변화가 일어났을 때, 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것이다.
  • 예를 들어, eventListener가 있다.

 

 


 



08. Facade Pattern

  • 건물의 앞쪽 정면이라는 뜻이다.
  • 복잡한 의존 관계가 있을 때, 중간에 Facade 객체를 두고, 여기에서 제공하는 Interface만 활용해 기능을 사용하는 방식이다.
  • Facade는 자신이 가진 각 클래스의 기능을 명확히 알아야 한다.

 

 


 


09. Strategy Pattern

  • 전략 패턴으로 불리며, 객체 지향의 꽃이라고 할 수 있다.
  • 유사한 행위들을 캡슐화한다.
  • 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아니라, 전략만 변경하여 유연하게 확장한다.
  • SOLID 중에서 개방 폐쇄 원칙(OCP)와 의존 역전 원칙(DIP) 따른다.
  • 예시로, Encoder가 있다.

 

 


 

 

개념 위주로 글을 작성해 봤는데, 추후에 디자인 패턴에 대해서는 따로 카테고리를 하나 만들어서 세세하게 정리할 예정이다!
728x90

'Etc > Java' 카테고리의 다른 글

객체지향  (0) 2023.12.28