메모장

221117 템플릿 매서드 패턴, 전략패턴, 프록시

Developer-Choi 2022. 11. 17. 11:31
728x90
728x90

템플릿 매서드 패턴과 비슷한 역할이면서도 상속의 단점을 제거하는 디자인 패턴이 전략패턴이다.

 

템플릿 매서드 패턴은 abstract 클래스를 사용하여

변하지 않는 부분을 메소드로 로직을 구성한 뒤 그 안에 call() 이라는 메소드를 실행시키게 하고

call()은 추상화 메소드로 만들어 자식한테 오버라이드 하게끔 하는 것이다.

 

전략패턴은 

변하지 않는 부분을 Context 라는 클래스로 만들고

변하는 부분을 interface Strategy 로 call() 메소드를 가지게 만든다.

 

비즈니스 로직(변하는 부분) 클래스는 Strategy를 구현받아 만들고

 

Context에서 Strategy를 의존한 채로 부가기능(변하지않는부분) + call + 부가기능(변하지않는부분)을 실행시킨다 

 

이 방식이 전략패턴이며, 이것은 스프링 의존관계 주입에서 사용하는 방식과 같다.

 

 

프록시를 사용하는 패턴은

프록시 패턴, 데코레이터 패턴이 있으며

프록시 패턴은 접근 제어에 사용

데코레이터 패턴은 기능 추가에 사용된다.

 

프록시 패턴은 Clinet 가 인터페이스인 Subject를 의존(주입)하게 만들고

Proxy와 , RealSubject 클래스를 만들 때는 인터페이스 Subject를 구현받아 만드는데 이때

RealSubject가 실제 로직을 구현하고

Proxy는 접근제어or부가 기능 후 Subject(구현체 RealSubject)를 주입 받아 사용하게 만든다

 

최종적으로 Client는 Subject를 주입받는데 이때 구현체는 Proxy를 구현받아 사용한다

 

동적프록시

(리플렉션) 클래스 정보를 가져올 수 있음

인터페이스는 jdk 동적 프록시를 사용

구체클래스는 cglib를 사용하여 동적프록시를 만듬