💡 해당 글은 『스프링 입문을 위한 자바 객체지향의 원리와 이해』 도서를 학습하며 도서의 내용을 참고하여 본인의 언어로 표현한 글입니다.
해당 도서는 디자인 패턴 전문 서적이 아니기에 디자인 패턴에 대해 상세하게는 다루지 않는다. 따라서 추후 『헤드퍼스트 디자인패턴』 도서를 통해 내용을 보완할 예정이다.
☁️ 디자인 패턴
객체 지향 4대 특성(캡상추다)은 객체 지향에서 지원하는 도구이다.
객체 지향 5원칙(SOLID)은 도구를 올바르게 사용하는 방법이다.
디자인 패턴은 도구를 올바르게 사용하여 프로그래밍 하도록 도와주는 비법이다.
디자인 패턴은 실제 개발 현장에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 베스트 프렉티스를 정리한 것이다. 디자인 패턴은 당연히 객체 지향 특성과 설계 원칙을 기반으로 구현되어 있다.
스프링은 객체 지향의 특성과 설계 원칙을 극한까지 적용한 프레임워크이다. 따라서 스프링을 공부하다보면 자연스럽게 디자인 패턴을 만날 것이다.
디자인패턴이란 객체 지향 프로그래밍으로 비즈니스 요구사항을 처리하며 마주친 문제들을 객체 지향의 특성과 원칙에 맞추어 해결한 대표적인 사례들을 모아놓은 것.
이라고 정의할 수 있겠다.
디자인 패턴은 객체지향의 특성 중 상속
, 인터페이스
, 컴포지션
을 이용한다.
☁️ Adapter
☁️ Proxy, Decolator
☁️ Singleton
싱글톤은 뭐낙 유명하니 간단하게만 언급하고 넘어가겠다.
인스턴스를 프로그램 에서 하나만 생성하고 사용하기 위한 디자인 패턴이다. 커넥션 풀, 스레드 풀과 같은 자원관리 인스턴스는 여러 개 생성되면 그 역할을 다하지 못한다 따라서 오직 하나의 인스턴스만 생성하고 계속해서 재사용하는 패턴이 Singleton 패턴이다.
public class Singleton {
static Singleton instance;
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
private Singleton() { }
}
유의할 점은 생성자를 private으로 선언하여 외부에서의 생성을 막아야 한다는 것이다.
이러한 싱글톤 객체는 쓰기 가능한 속성을 가지지 않는 것이 정석이다.
스프링 컨텍스트에서 빈을 하나의 인스턴스만 생성하여 관리하기 위해 사용한다.
☁️ Template Method, Factory Method
☁️ Strategy, Template Callback
☁️ 정리
Adapter
- 호환되지 않는 두 인터페이스에 확장과 컴포지션을 사용한 어댑터를 생성하여 호환가능하도록 설계하는 패턴.
- 스프링에서 새로운 인터페이스인
MultiValueMap
에서 기존의Map
인터페이스를 호환하도록 설계하기위해서 사용됨.
Proxy
- 객체의 메서드를 수행하는 대리자를 두어 특정 공통 로직을 수행할 수 있도록 설계하는 패턴. 구체 클래스와 동일한 인터페이스를 구현하고, 해당 인터페이스를 컴포지션을 가지는 디자인 패턴.
- 주로 인터페이스의 메서드를 호출하기 전에 로깅, 캐싱 같은 특정 공통 로직을 수행하기위해 사용됨.
- 스프링에서 AOP를 구현하기 위해 사용됨.
Decolator
- Proxy와 동일한 구조에서 반환값에 변경을 주기 사용하는 패턴.
Singleton
- 프로그램 내에서 하나의 인스턴스만을 생성하도록 설계하는 패턴.
- 스프링에서 등록된 빈을 싱글톤으로 관리하기위해 사용됨.
Template Method
- 알고리즘을 템플릿화 시키고 실제 동작 코드는 하위 클래스에게 위임하여 하위 클래스의 동작이 알고리즘에 맞추어 실행되도록 설계하는 패턴
- 스프링의 Dispatcher Servlet에서 doService 메서드가
FrameworkServlet
의 동작을 구현한 부분에 해당됨.
Factory Method
- 하위 클래스에게 객체를 생성하는 메서드를 오버라이딩 하도록 설계하는 패턴
- 스프링에서
FactoryBean
을 확장하는 경우 사용됨.
Strategy
- 전략과 전략을 수행하는 컨텍스트, 전략을 생성하고 컨텍스트에게 전략을 주입하는 클라이언트로 이루어진 패턴. 컨텍스트 마다 다른 전략을 수행시키기 위해 사용되는 패턴.
- 스프링에서 스프링 빈 인스턴스를 생성하는 코드애서 사용됨.
Template Callback
- 전략 패턴에서 전략을 익명 내부 클래스로 구현하여 사용하는 패턴.
- 스프링 DI에서 컨텍스트가 메서드로 전략 인스턴스를 생성하는 구조를 사용함.
외에도 스프링 MVC에서는 MVC패턴과 Front-Controller패턴을 활용함.
'JAVA > 자바 객체지향의 원리와 이해' 카테고리의 다른 글
07. 스프링 삼각형과 설정 정보 (1) | 2024.01.21 |
---|---|
05. 객체 지향 설계 5원칙 - SOLID (0) | 2024.01.18 |
04. 자바가 확장한 객체 지향 (0) | 2024.01.18 |
03. 자바와 객체지향 (0) | 2024.01.17 |
02. 자바의 절차적/구조적 프로그래밍 - JVM의 메모리 (0) | 2024.01.17 |