📕

[자바 객체 지향] Chapter 6. 스프링이 사랑한 디자인 패턴

작성일자
Sep 15, 2022
태그
SUB PAGE
프로젝트
자바 객체 지향
책 종류
본 게시글은 하단 책을 읽고 학습한 내용을 제 생각으로 요약, 정리한 글입니다.
목차
 

1. 어댑터 패턴

  • 정의: 호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴
    • 즉, 객체를 속성으로 만들어서 참조하는 패턴
 

2. 프록시 패턴

  • 정의: 제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴
  • 특징
    • 대리자는 실제 서비스와 같은 이름의 메서드를 구현함. 이때 인터페이스를 사용함.
    • 대리자는 실제 서비스에 대한 참조 변수를 가짐(합성).
    • 대리자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고 그 값을 클라에게 돌려줌.
    • 대리자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수 있음.
 

3. 데코레이션 패턴

  • 정의: 메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴
  • 특징
    • 장식자는 실제 서비스와 같은 이름의 메서드를 구현함. 이때 인터페이스를 사용함.
    • 장식자는 실제 서비스에 대한 참조 변수를 가짐(합성).
    • 장식자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고, 그 반환값에 장식을 더해 클라에게 돌려줌.
    • 장식자는 실제 서비스이 메서드 호출 전후에 별도의 로직을 수행할 수 있음.
 

4. 싱글턴 패턴

  • 정의: 클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴
  • 특징
    • private 생성자를 가짐.
    • 단일 객체 참조 변수를 정적 속성으로 가짐.
    • 단일 객체 참조 변수가 참조하는 단일 객체를 반환하는 getInstance() 정적 메서드를 가짐.
    • 단일 객체는 쓰기 가능한 속성을 갖지 않는 것이 정석임.
  • 필수 요소
    • new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정함.
    • 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요함.
    • 유일한 단일 객체를 참조할 정적 참조 변수가 필요함.
    •  

5. 템플릿 메서드 패턴

  • 정의: 상위 클래스의 견본 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴
  • 구성 요소
    • 템플릿 메서드
      • 공통 로직을 수행, 로직 중에 하위 클래스에서 오버라이딩한 추상 메서드/훅 메서드를 호출
    • 템플릿 메서드에서 호출하는 추상 메서드
      • 하위 클래스가 반드시 오버라이딩해야 함.
    • 템플릿 메서드에서 호출하는 훅 메서드
      • 하위 클래스가 선택적으로 오버라이딩함.
 

6. 팩터리 메서드 패턴

  • 정의: 오버라이드된 메서드가 객체를 반환하는 패턴
 

7. 전략 패턴

  • 정의: 클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴
  • 구성 요소
    • 전략 메서드를 가진 전략 개체
    • 전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자)
    • 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자)
    •  

8. 템플릿 콜백 패턴

  • 정의: 전략을 익명 내부 클래스로 구현한 전략 패턴
    • 전략 패턴의 변형. DI에서 사용하는 특별한 형태의 전략 패턴
  • 특징
    • 전략 패턴과 동일한데, 전략을 익명 내부 클래스로 정의해서 사용함.
 

9. 스프링이 사랑한 다른 패턴들

  • 프론트 컨트롤러 패턴: 스프링 MVC에서 활용
  • MVC 패턴: 스프링 MVC에서 활용
 
[자바 객체 지향] Chapter 6. 스프링이 사랑한 디자인 패턴