🌱 오늘의 주제 : 스프링이 사랑한 디자인 패턴
🌱 어댑터 패턴(Adapter Pattern)
- 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것.
- 예를 들어, 데이터베이스 공통의 인터페이스인 ODBC 또는 JDBC를 이용해 다양한 데이터베이스 시스템을 단일한 인터페이스로 조작할 수 있게 하는 것.
- 개방 폐쇄 원칙 (OCP)를 활용한 패턴.
- "호출당하는 족의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴"
🌱 프록시 패턴(Proxy Pattern)
- 프록시는 대리자, 대변인이라는 뜻을 가진 단어이다.
- 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다.
- 대리자는 실제 서비스에 대한 참조 변수를 갖는다.(합성)
- 대리자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려준다.
- 대리자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행 할 수도 있다.
- "제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴."
🌱 데코리터 패턴(Decorator Pattern)
- 데코레이터(장식자)는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다.
- 장식자는 실제 서비스에 대한 참조 변수를 갖는다.(합성)
- 장식자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고, 그 반환값에 장식을 더해 클라이언트에게 돌려준다.
- 장식자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수도 있다.
- "메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴"
🌱 싱글턴 패턴(Singleton Pattern)
- 인스턴스를 하나만 만들어 사용하기 위한 패턴이다.
- private 생성자를 갖는다.
- 단일 객체 참조 변수를 정적 속성으로 갖는다.
- 단일 객체 참조 변수가 참조하는 단일 객체를 반환하는 getInstance() 정적 메서드를 갖는다.
- "클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴"
🌱 템플릿 메서드 패턴(Template Method Pattern)
템플릿 메서드 패턴의 구성 요소 | 상위 클래스 Animal | 하위 클래스 Dog/Cat |
템플릿 메서드 공통 로직을 수행, 로직 중에 하위 클래스에서 오버라이딩한 추상 메서드 / 훅 메서드 호출 |
playWithOwner() | |
템플릿 메서드에서 호출하는 추상 메서드 하위 클래스가 반드시 오버라이딩 해야 한다. |
play() | 오버라이딩 필수 |
템플릿 메서드에서 호출하는 훅(Hook, 갈고리) 메서드 하위 클래스가 선택적으로 오버라이딩한다. |
runSomething() | 오버라이딩 선택 |
- "상위 클래스의 견본 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴"
- 의존 역전 원칙(DIP)를 활용한다.
🌱 팩터리 메서드 패턴 (Factory Method Pattern)
- 펙터리 메서드는 객체를 생성 반환하는 메서드를 말한다.
- 패턴은 하위 클래스에서 팩터리 메서드를 오버라이딩해서 객체를 반환하게 하는 것이다.
- "오버라이드된 메서드가 객체를 반환하는 패턴"
- 의존 역전 원칙(DIP)를 활용하고 있다.
🌱 전략 패턴(Strategy Pattern)
- 전략 메서드를 가진 전략 객체
- 전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자)
- 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트( 제3자, 전략 객체의 공급자)
- 상속이라는 제한이 있는 템플릿 메서드 패턴보다 전략 패턴이 더 많이 활용된다.
- "클라이언트가 전략을 생성해 전략을 실행할 컨테스트에 주입하는 패턴"
- 개방 폐쇄 원칙(OCP)과 의존 역전 원칙(DIP)가 적용되었다.
🌱 템플릿 콜백 패턴(Template Callback Pattern - 견본/회신 패턴)
- 전략 패턴의 변형이다.
- DI(의존성 주입)에서 사용하는 특별한 형택의 전략 패턴이다.
- 전략 패턴과 모든 것이 동일하지만, 전략을 익명 내부 클래스로 정의해서 사용한다.
- "전략을 익명 내부 클래스로 구현한 전략 패턴"
- 개방 폐쇄 원칙(OCP)과 의존 역전 원칙(DIP) 적용된 설계 패턴이다.
'Spring > Book - 스프링 입문을 위한 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
07. Spring - 의존성 주입 (0) | 2023.04.28 |
---|---|
07. 스프링 삼각형과 설정 정보 (1) (0) | 2023.04.14 |
05. 객체 지향 설계 5원칙 - SOLID (0) | 2023.03.31 |
04. 자바가 확장한 객체 지향 (2) (0) | 2023.03.24 |
04. 자바가 확장한 객체 지향 (1) (0) | 2023.03.17 |