web study/배경지식
프록시 패턴 | 데코레이터 패턴
65살까지 코딩
2023. 12. 18. 21:58
728x90
반응형
프록시란
특정 구현을 실행하기 전에 구현체 앞에서 대신 호출되어 실행되는 대리 응답체이다.
프록시는 여러가지 경우에 사용되는데
예를 들어 특정 로직을 실행시키기 전에 권한을 확인한다던지
모든 로직에 로그를 단다던지
캐싱을 한다던지 등등 여러가지 쓰임새로 사용된다.
프록시 패턴과 데코레이터 패턴 둘다 프록시를 사용한다.
둘을 구분하는 구분점은 패턴의 의도이다.
접근제어를 의도(권한/ 캐싱)로 작성한다면 프록시 패턴
부가 기능을 추가하는 의도(로그, 꾸미기)로 작성한다면 데코레이터 패턴이다.
자바 및 코틀린에서는 프록시를 사용하기위해 실제 클래스를 상속해서 구현하거나
인터페이스를 사용한다.
프록시를 사용하기전에 클라이언트가 특정 로직을 호출하면 실제 클래스에서 메소드를 가져와 사용하지만 프록시를 사용하게되면 클라이언트가 특정 로직을 호출하면 프록시가 호출되고 프록시가 실제 객체를 호출하여 사용된다.
간단한 코드 예시를 보자
interface Service {
fun doSomething()
}
class ServiceRealSubject: Service {
override fun doSomething() {
println("나는 실제 타겟 객체로 열심히 일을 한다.")
}
}
class ServiceProxy(
private val target: ServiceRealSubject
): Service {
override fun doSomething() {
println("나는 프록시로 실제 객체 전에 열심히 일을 한다.")
target.doSomething()
}
}
class ProxyTestCode {
companion object {
val serviceClient = ServiceProxy(ServiceRealSubject())
}
@Test
fun serviceTest(){
serviceClient.doSomething()
}
}
// result
//나는 프록시로 실제 객체 전에 열심히 일을 한다.
//나는 실제 타겟 객체로 열심히 일을 한다.
Client 가 proxy 호출 -> 프록시 기능 후 -> 실제 타겟 호출
728x90
반응형