스프링 프레임워크
자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
디자인 패턴
어댑터 패턴(Adapter Pattern)
"호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴"
프록시 패턴(Proxy Pattern)
"제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴"
클라이언트가 최종적으로 돌려 받는 반환값을 조작하지 않고 그대로 전달
- 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다.(인터페이스 사용)
- 대리자는 실제 서비스에 대한 참조 변수를 갖는다(합성).
- 대리자는 실제 서비스와 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려준다.
- 대리자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수 있다.
데코레이터 패턴(Decorator Pattern)
"메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴"
프록시 패턴과 구현 방법은 같지만 클라이언트가 받는 반환값에 장식을 덧입힌다는 점에서 차이점이 있다.
개방 폐쇄 원칙과 의존 역전 원칙이 적용된 설계 패턴
- 장식자는 실제 서비스와 같은 이름의 메서드를 구현한다.(인터페이스 사용)
- 장식자는 실제 서비스에 대한 참조 변수를 갖는다(합성).
- 장식자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고, 그 반환값에 장식을 더해 클라이언트에게 돌려준다.
- 장식자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수도 있다.
프록시 패턴과 데코레이터 패턴의 차이점
| 프록시 패턴 | 제어의 흐름을 변경하거나 별도의 로직 처리를 목적으로 한다. 클라이언트가 받는 반환값을 특별한 경우가 아니면 변경하지 않는다. |
|---|
| 데코레이터 패턴 | 클라이언트가 받는 반환값에 장식을 더한다. |
싱글톤 패턴(Singleton Pattern)
"클래스의 인스턴스(객체)를 하나만 만들어 사용하는 패턴"
인스턴스를 하나만 만들어 사용하기 위한 패턴
- new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정한다.
- 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다.
- 유일한 단일 객체를 참조하는 단일 객체르러반환하는 getInstance() 정적 메서드를 갖는다.
- 단일 객체는 쓰기 가능한 속성을 갖지 않는 것이 정석이다.
탬플릿 메서드 패턴(Template Method Pattern)
"상위 클래스의 경본 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴"
상위 클래스에 공통 로직을 수행하는 템플릿 메서드와 하위 클래스에 오버라이딩을 강제하는 추상 메서드 또는 선택적으로 오버라이딩할 수 있는 훅(Hook) 메서드를 두는 패턴(의존 역전 원칙(DIP)을 활용)
팩터리 메서드 패턴(Factory Method Pattern)
"오버라이드된 메서드가 객체를 반환하는 패턴"
객체를 생성 반환하는 메서드, 의존 역전 원칙(DIP)을 활용
전략 패턴(Strategy Pattern)
"클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴"
개방 폐쇄 원칙(OCP)와 의존 역전 원칙(DIP) 적용
전략 패턴을 구성하는 3요소
- 전략 메서드를 가진 전략 객체
- 전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자)
- 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자)
템플릿 콜백 패턴(Template Callback Pattern)
"전략을 익명 내부 클래스로 구현한 전략 패턴"
개방 폐쇄 원칙(OCP)와 의존 역전 원칙(DIP) 적용
- 템플릿 콜백 패턴은 전략 패턴과 모든 것이 동일한데 전략을 익명 내부 클래스로 정의해서 사용한다는 특징이 있다.
- 스프링은 리팩터링된 템플릿 콜백 패턴을 DI에 적극 활용하고 있다.