카테고리 없음

스프링이 사랑한 디자인 패턴

병고라니 2023. 8. 24. 04:27

 

1. 디자인 패턴

  • 정의
    • 디자인 패턴은 실제 개발 현장에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 베스트 프랙티스를 정리한 것이다.
    • 이러한 디자인 패턴은 객체지향 특성과 설계 원칙(SOLID)을 기반으로 한 것이다.
  • 스프링과 디자인 패턴
    • 스프링은 OOP 프레임워크 이다.
    • 따라서 스프링은 객체 지향의 특성과 설계 원칙을 극한까지 적용한 프레임워크 이다.
    • 스프링을 학습하기 위해서는 디자인 패턴 학습도 필요하다고 볼 수 있다.

 

2. 어댑터 패턴(Adapter Pattern)

  • 정의
    • 어댑터는 호환되지 않는 인터페이스를 가진 객체들이 협력(collaboration)할 수 있도록 하는 디자인 패턴
  • 기본 구조
    •  

2.1 어댑터 패턴

  • 구조 설명
    • Client는 Target을 의존하고 있다.
    • Client와 Target의 의존 관계를 수정하지 않기 위해서는 Adapter는 Target을 구현한다.
    • 구현 이 후 Adapter는 새로운 기능인 Adaptee를 구성으로 사용한다.

 

3. 프록시 패턴(Proxy Pattern)

  • 정의
    • 특정 객체로의 접근을 제어하는 대리인을 제공하는 패턴
    • 제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴
  • 기본 구조

  • 구조 설명
    • Proxy 클래스
      • 실제 대상에 대한 접근 제어, 생성, 삭제에 대한 책임을 진다.
      • Subject와 동일한 인터페이스를 제공하여 실제 대상을 대체할 수 있어야 한다.
    • RealSubject 클래스
      • 프록시가 대리하고 있는 실제 객체
  • 특징
    • 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다.
    • 대리자는 실제 서비스에 대한 참조 변수를 갖는다. (합성)
    • 대리자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려준다.
    • 대리자는 실제 서비스의 메서드를 호출 전후에 별도의 로직을 수행할 수도 있다.

 

4. 데코레이터 패턴

  • 정의
    • 데코레이터는 도장/도배업자를 의미한다.
    • 객체들을 새로운 행동을 포함한 래퍼를 객체들 내에 넣어 해당 객체들에 연결시키는 구조적 디자인 패턴
    • 메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴
  • 특징
    • 장식자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다.
    • 장식자는 실제 서비스에 대한 참조 변수를 갖는다(합성).
    • 장식자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고, 그 반환값에 장식을 더해 클라이언트에게 돌려준다.
    • 장식자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할  수도 있다.

 

5. 싱글턴 패턴 (Singleton Pattern)

  • 정의
    • 인스턴스를 하나만 들어 사용하기 위한 패턴
    • 싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용 한다.
  • 특징
    • new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정한다.
    • 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다.
    • 유일한 단일 객체를 참조할 정적 참조 변수가 필요하다.

 

6. 템플릿 메서드 패턴 (Template Method Pattern)

  • 정의
    • 템플릿 메서드는 부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드(재정의)할 수 있도록 하는 행동 디자인 패턴입니다. 
  • 특징
    • 상위 클래스에 공통 로직을 수행하는 템플릿 메서드와 하위 클래스에 오버라이딩을 강제하는 추상 메서드 또는 선택적으로 오버라이딩할 수 잇는 훅(Hook) 메서드를 두는 패턴

 

7. 팩토리 메서드 패턴 

  • 정의
    • 팩토리 메서드는 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴 입니다. 
    • 오버라이드된 메서드가 객체를 반환하는 패턴

 

8. 전략 패턴

  • 정의
    • 알고리즘의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그들의 객체들을 상호교환할 수 있도록 하는 행동 디자인 패턴
  • 기억 해야하는 세 요소
    • 전략 메서드를 가진 전략 객체
    • 전략 객체를 사용하는 컨텍스트
    • 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트

 

9. 템플릿 콜백 패턴  

  • 정의
    • 전략을 익명 내부 클래스로 구현한 전략 패턴
  • 특징
    • 스프링은 템플릿 콜백 패턴을 DI에 활용한다.