221117 템플릿 매서드 패턴, 전략패턴, 프록시
템플릿 매서드 패턴과 비슷한 역할이면서도 상속의 단점을 제거하는 디자인 패턴이 전략패턴이다.
템플릿 매서드 패턴은 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를 사용하여 동적프록시를 만듬