카테고리 없음
스프링이 사랑한 디자인 패턴
병고라니
2023. 8. 24. 04:27
1. 디자인 패턴
- 정의
- 디자인 패턴은 실제 개발 현장에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 베스트 프랙티스를 정리한 것이다.
- 이러한 디자인 패턴은 객체지향 특성과 설계 원칙(SOLID)을 기반으로 한 것이다.
- 스프링과 디자인 패턴
- 스프링은 OOP 프레임워크 이다.
- 따라서 스프링은 객체 지향의 특성과 설계 원칙을 극한까지 적용한 프레임워크 이다.
- 스프링을 학습하기 위해서는 디자인 패턴 학습도 필요하다고 볼 수 있다.
2. 어댑터 패턴(Adapter Pattern)
- 정의
- 어댑터는 호환되지 않는 인터페이스를 가진 객체들이 협력(collaboration)할 수 있도록 하는 디자인 패턴
- 기본 구조
- 구조 설명
- Client는 Target을 의존하고 있다.
- Client와 Target의 의존 관계를 수정하지 않기 위해서는 Adapter는 Target을 구현한다.
- 구현 이 후 Adapter는 새로운 기능인 Adaptee를 구성으로 사용한다.
3. 프록시 패턴(Proxy Pattern)
- 정의
- 특정 객체로의 접근을 제어하는 대리인을 제공하는 패턴
- 제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴
- 기본 구조
- 구조 설명
- Proxy 클래스
- 실제 대상에 대한 접근 제어, 생성, 삭제에 대한 책임을 진다.
- Subject와 동일한 인터페이스를 제공하여 실제 대상을 대체할 수 있어야 한다.
- RealSubject 클래스
- 프록시가 대리하고 있는 실제 객체
- Proxy 클래스
- 특징
- 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다.
- 대리자는 실제 서비스에 대한 참조 변수를 갖는다. (합성)
- 대리자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려준다.
- 대리자는 실제 서비스의 메서드를 호출 전후에 별도의 로직을 수행할 수도 있다.
4. 데코레이터 패턴
- 정의
- 데코레이터는 도장/도배업자를 의미한다.
- 객체들을 새로운 행동을 포함한 래퍼를 객체들 내에 넣어 해당 객체들에 연결시키는 구조적 디자인 패턴
- 메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴
- 특징
- 장식자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다.
- 장식자는 실제 서비스에 대한 참조 변수를 갖는다(합성).
- 장식자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고, 그 반환값에 장식을 더해 클라이언트에게 돌려준다.
- 장식자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수도 있다.
5. 싱글턴 패턴 (Singleton Pattern)
- 정의
- 인스턴스를 하나만 들어 사용하기 위한 패턴
- 싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용 한다.
- 특징
- new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정한다.
- 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다.
- 유일한 단일 객체를 참조할 정적 참조 변수가 필요하다.
6. 템플릿 메서드 패턴 (Template Method Pattern)
- 정의
- 템플릿 메서드는 부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드(재정의)할 수 있도록 하는 행동 디자인 패턴입니다.
- 특징
- 상위 클래스에 공통 로직을 수행하는 템플릿 메서드와 하위 클래스에 오버라이딩을 강제하는 추상 메서드 또는 선택적으로 오버라이딩할 수 잇는 훅(Hook) 메서드를 두는 패턴
7. 팩토리 메서드 패턴
- 정의
- 팩토리 메서드는 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴 입니다.
- 오버라이드된 메서드가 객체를 반환하는 패턴
8. 전략 패턴
- 정의
- 알고리즘의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그들의 객체들을 상호교환할 수 있도록 하는 행동 디자인 패턴
- 기억 해야하는 세 요소
- 전략 메서드를 가진 전략 객체
- 전략 객체를 사용하는 컨텍스트
- 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트
9. 템플릿 콜백 패턴
- 정의
- 전략을 익명 내부 클래스로 구현한 전략 패턴
- 특징
- 스프링은 템플릿 콜백 패턴을 DI에 활용한다.