bky373 / design-patterns

Gof 디자인 패턴 실습

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

디자인 패턴

디자인 패턴이란?

  • 자주 사용하는 설계 패턴을 정형화한 것을 말한다.
  • 유형별로 가장 최적의 방법으로 개발을 할 수 있도록 미리 정해둔 설계이기도 하다.
  • 명확한 정답이 있는 것은 아니며, 프로젝트의 상황에 맞추어 적용 가능하다.

Gof 디자인 패턴

  • Gof (gang of four) : 객체지향 개념을 따르는 설계 중 재사용이 필요한 경우, 유용한 설계를 디자인 패턴으로 정리해둔 것이다. Gof 의 디자인 패턴은 총 23개이다.

디자인 패턴의 장점

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

디자인 패턴의 단점

  • 객체지향 설계 / 구현
  • 초기 투자 비용 부담 ( 추상클래스나 인터페이스 등 여러가지 구조를 작성해야 하기 때문 )

1. Singleton 패턴

  • 어떠한 클래스(객체)가 유일하게 1개만 존재할 때 사용한다.
  • 서로 자원을 공유하는 경우에 주로 사용되는데, 실물 세계에서는 프린터가 해당되며, 실제 프로그래밍에서는 TCP Socket 통신에서 서버와 연결된 connect 객체에 주로 사용한다. 또는 스프링의 bean 객체를 생각해볼 수 있다. ( Application Context를 통해 스프링이 관리함 )

2. Adapter 패턴

  • Adapter는 실생활에서 110V를 220V로 변경해주거나, 그 반대로 해주는 변환기를 예로 들 수 있다. (흔히 돼지코라고 하는)
  • 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 한다.
  • SOLID 중에서 개방 폐쇄 원칙 (OCP)를 따른다. 자기 자신의 형태는 변환시키지 않고 어댑터 클래스를 추가하여 서로 다른 인터페이스의 형태를 맞출 수 있다.

3. Proxy 패턴

  • Proxy는 대리인 이라는 뜻으로, 뭔가를 대신해서 처리하는 존재를 말한다.
  • Proxy Class를 통해 대신 전달 하는 형태로 설계되며, 실제 Client는 Proxy로부터 결과를 받는다.
  • Cache의 기능으로도 활용이 가능하다.
  • SOLID 중에서 개방폐쇄 원칙(OCP)과 의존 역전 원칙(DIP)을 따른다.
  • 스프링에서는 Proxy 패턴을 활용해 AOP를 사용한다.

4. Decorator 패턴

  • 데코레이터 패턴은 기존 뼈대가 되는 클래스는 유지하고, 이후 필요한 형태로 꾸밀 때 사용한다.
  • 확장이 필요한 경우 상속의 대안으로도 활용한다.
  • SOLID 중에서 개방폐쇄 원칙(OCP)와 의존 역전 원칙(DIP)을 따른다.
  • 실생활에서 예를 들면, 커피가 뼈대가 되는 클래스이고, 여기에 물을 추가하면 아메리카노, 우유를 추가하면 카페라떼가 되는 식이다.

5. Observer 패턴

  • 관찰자 패턴은 변화가 일어낫을 때, 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것이다.
  • event listener 에서 해당 패턴을 많이 사용한다.

6. Facade 패턴

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

7. Strategy 패턴

  • 전략 패턴으로 불리며, 객체지향의 꽃이다.

  • 유사한 행위들을 캡슐화하여, 객체의 행위를 바꾸고 싶은 경우 이를 직접 변경하지 않고 전략만 변경하여, 행위를 유연하게 확장하는 패턴이다.

  • SOLID 중에서 개방폐쇄 원칙(OCP)과 의존 역전 원칙(DIP)을 따른다.

  • 예) 전략을 나누어 인코딩하는 객체를 구성할 수 있다.

  • 필요한 요소들

  1. 전략 메소드를 가진 전략 객체 (Normal Strategy, Base64 Strategy)
  2. 전략 객체를 사용하는 컨텍스트 (Encoder)
  3. 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트 (Main)

Reference

  • 패스트캠퍼스 - 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online

About

Gof 디자인 패턴 실습


Languages

Language:Java 100.0%