일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- kotiln const val
- java 백준 1509
- rabbitmq 싱글톤
- 자바 백준 팩토리얼 개수
- Spring ipfs
- kotiln const
- mongodb lookup
- 익명 객체 @transactional
- 자바 1676
- spring mongodb switch
- kotiln functional interface
- go
- 백준 1504 java
- 백준 연결요소 자바
- ipfs bean
- 전략 패턴이란
- 안정해시
- java 팩토리얼 개수
- java 1238
- java 파티
- spring mongoTemplate switch
- 백준 2252 줄세우기
- nodejs rabbitmq
- Java Call By Refernce
- spring mongoTemplate
- java 1509
- javav 1676
- ipfs singletone
- 백준 특정한 최단 경로
- spring mongodb
Archives
- Today
- Total
공부 흔적남기기
프록시 패턴 | 데코레이터 패턴 본문
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
반응형
'web study > 배경지식' 카테고리의 다른 글
언제 관계형 데이터베이스 이외의 것을 사용해야 할까? (0) | 2025.03.13 |
---|---|
jdk dynamic proxy | cglib (0) | 2023.12.19 |
전략 패턴이란 (0) | 2023.05.24 |
템플릿 메서드 패턴이란 (0) | 2023.05.22 |
Sentry 적용시 기본 설정 (0) | 2023.04.14 |