디자인 패턴 정리

2022. 4. 27. 21:08Spring/개념

템플릿 메서드 패턴

- 상속을 통해 기능을 확장해서 사용하는 부분이다. 변하지 않는 부분은 슈퍼클래스에 두고 변하는 부분은 추상 메소드로 정의해둬서 서브클래스에서 오버라이드하여 새롭게 정의해 쓰도록 하는것이다.

단점 : 접근 제한이 많다. 로직마다 상속을 통해 클래스를 만들어야 한다. 관계에 대한 유연성이 떨어진다.

 

전략 패턴

- 개방 폐쇄 원칙(OCP)를 잘 지키는 구조이면서도 템플릿 메소드 패턴보당 유연하고 확장성이 뛰어난 것이, 오브젝트를 아예 둘로 분리하고 클래스 레벨에서는 인터페이스를 통해서만 의존하도록 만드는 전략 패턴이다.

OCP 관점에 보면 확장에 해당하는 변하는 부분을 별도의 클래스로 만들어 추상화된 인터페이스를 통해 위임하는 방식이다. 필요에 따라 컨텍스트는 그대로 유지하면서 전략을 바꿔 쓸 수 있다.

위키백과

 

템플릿 / 콜백 패턴

- 단일 전략 메소드를 갖는 전략 패턴이면서 익명 내부 클래스를 사용해서 매번 전략을 새로 만들어서 사용하고, 컨텍스트 호출과 동시에 전략 DI를 수행하는 방식의 패턴을 말한다.

템플릿은 한 번에 하나 이상의 콜백을 사용할 수도 있고, 하나의 콜백을 여러 번 호출할 수도 있다.

템플릿 / 콜백을 설계할때는 템플릿과 콜백 사이에 주고받는 정보에 관심을 둬야한다.

스프링에서 자주 쓰는 패턴입니다.

 

데코레이터 패턴

- 타깃에 부가적인 기능을 런타임 시 다이내믹하게 부여해주기 위해 프록시를 사용하는 패턴을 말한다. 다이나믹하게 기느을 부가한다는 의미는 컴파일 시점, 즉 코드상에서는 어떤 방법과 순서로 프록시와 타깃이 연결되어 사용되는지 정해져 있지 않다는 뜻이다.

프록시 - 클라이언트가 사용하려는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것을 대리자, 대리인과 같은 역할을 한다.

 

프록시 패턴

- 일반적으로 사용하는 프록시라는 용어와 디자인 패턴에서 말하는 프록시 패턴은 구분 할 필요가 있다. 전자는 클라이언트와 사용 대상 사이에 대리 역할을 맡은 오브젝트를 두는 방법을 총칭한다면, 후자는 프록시를 사용하는 방법 중에서 타깃에 대한 접근 방법을 제어하련느 목적을 가진 경우를 가리킨다.

프록시 패턴은 타깃의 기능을 확장하거나 추가하지 않는다. 대신 클라이언트가 타깃에 접근하는 방식을 변경해준다. 타깃 오브젝트를 생성하기가 복잡하거나 당장 필요하지 않은 경우에는 꼭 필요한 시점까지 오브젝트를 생성하지 않는 편이 좋다. 그런데 타깃 오브젝트에 대한 레퍼런스가 미리 필요할 수가 있다. 이럴 때 프록시 패턴을 적용하면 된다.

위키백과

 

팩토리 메서드 패턴

- 팩토리 메소드 패턴 은 생성될 객체의 정확한 클래스를 지정하지 않고도 객체 생성 문제를 처리하기 위해 팩토리 메소드를 사용 하는 생성 패턴입니다 . 이것은 생성자를 호출하는 대신 인터페이스에 지정 되고 자식 클래스에 의해 구현되거나 기본 클래스에 구현되고 선택적 으로 파생 클래스에 의해 재정의되는 팩토리 메서드를 호출하여 개체를 생성하여 수행됩니다.

조건에 따른 객체 생성을 팩토리 클래스로 위임하여, 팩토르 클래스에서 객체를 생성하는 패턴

위키백과

 

추상 팩토리 패턴

- 추상 팩토리 패턴(Abstract factory pattern)은 다양한 구성 요소 별로 '객체의 집합'을 생성해야 할 때 유용하다. 이 패턴을 사용하여 상황에 알맞은 객체를 생성할 수 있다.

대표적인 예로,  자바 GUI 구성 요소인 AWT/Swing 라이브러리의 룩 앤드 필 변경 기능을 들 수 있다. 메탈, 마이크로 소프트 윈도우, 맥 OS 등의 모양으로 변경할 수 있다. 이에 따라 추상 팩토리에 있는 기본 팩토리 객체가 변경된다. 그러면 이후로 생성되는 GUI 객체들은 전부 해당 룩앤필에 따른다.

서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이들 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴

 

Factory Methods Pattern VS Abstract Factory Pattern

팩토리 메소드 패턴과 추상 팩토리패턴을 비교해보자.

 

팩토리 메소드 패턴 : 인스턴스를 만드는 과정에 집중이 되어 있다.

추상 팩토리 메소드 패턴 : 클라이언트의 입장에서 클라이언트가 추상화된 인퍼페이스를 통해 객체를 생성할 수 있도록 해준다.

 

공통점: 둘 다 구체적인 객체 생성 과정을 추상화한 인터페이스를 제공한다.

 

팩토리 메서드 패턴은 "팩토리를 구현하는 방법 (inheritance)"에 초점을 두고, 

추상 팩토리 패턴은 "팩토리를 사용하는 방법 (compositoin)"에 초점을 둔다.

 

목적이 꽤나 다른데,

팩토리 메서드 패턴 구체적인 인스턴스 생성 과정을 하위 또는 구체적인 클래스로 옮기는 것이 목적이고, 

추상 팩토리 패턴 관련있는 여러 객체를 구체적인 클래스에 의존하지 않고 만들 수 있게 해주는 것이 목적이다.

출처 : https://kingchan223.tistory.com/284

 

3. 추상 팩토리 패턴 (Abstract factory Pattern)

추상 팩토리 패턴 서로 관련 있는 객체를 만들어주는 인터페이스. 팩토리 패턴과 유사하지만 초점이 Clinet에 맞추어 졌다고 할 수 있다. 목적: 팩토리에서 인스턴스를 만들어 사용하는 Client코드

kingchan223.tistory.com