Proxy
Proxy ํจํด์ ํด๋ผ์ด์ธํธ์ ์ค์ ๊ฐ์ฒด(Real Subject) ์ฌ์ด์ ๋๋ฆฌ์(Proxy)๋ฅผ ๋์ด, ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ์ค์ ๊ฐ์ฒด์ ์ ๊ทผํ์ง ์๊ณ Proxy๋ฅผ ํตํด ์ ๊ทผํ๋๋ก ํ๋ ํจํด์ ๋๋ค.
โโโโโโโโโโโ
โ Client โ
โโโโโโฌโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโ
โ Proxy โ
โ (๋ถ๊ฐ ๊ธฐ๋ฅ ์ ์ฉ)โ
โโโโโโฌโโโโโฌโโโโโโ
โ โ
โ โ ์์ (Delegation)
โผ โผ
โโโโโโโโโโโ โโโโโโโโโโโโโโ
โ Real โ โ ๋ถ๊ฐ ๊ธฐ๋ฅ โ
โ Subject โ โ (๋ก๊น
, ์บ์ฑ ๋ฑ) โ
โโโโโโโโโโโ โโโโโโโโโโโโโโ
์ด๋ฅผ ํตํด ์ ๊ทผ ์ ์ด๋ ์ถ๊ฐ ๊ธฐ๋ฅ(๋ก๊น , ์บ์ฑ, ๊ถํ ๊ฒ์ฌ ๋ฑ)์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
How do code
// Specification: Proxy ํจํด์ ์ค์ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๊ฑฐ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
// Service ์ธํฐํ์ด์ค
public interface Service {
String operation();
}
// ์ค์ ๊ฐ์ฒด (Real Subject)
public class RealService implements Service {
@Override
public String operation() {
return "์ค์ ์๋น์ค์ ๋์ ๊ฒฐ๊ณผ";
}
}
// Proxy ๊ฐ์ฒด
public class ServiceProxy implements Service {
private Service realService;
public ServiceProxy() {
// ์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์ฃผ์
ํฉ๋๋ค.
this.realService = new RealService();
}
@Override
public String operation() {
// ํธ์ถ ์ ๋ถ๊ฐ ๊ธฐ๋ฅ (์: ๋ก๊น
)
System.out.println("Proxy: operation() ํธ์ถ ์ ");
// ์ค์ ๊ฐ์ฒด์ ์์
String result = realService.operation();
// ํธ์ถ ํ ๋ถ๊ฐ ๊ธฐ๋ฅ (์: ๊ฒฐ๊ณผ ์บ์ฑ)
System.out.println("Proxy: operation() ํธ์ถ ํ");
return result;
}
}// Service ์ธํฐํ์ด์ค
interface Service {
fun operation(): String
}
// ์ค์ ๊ฐ์ฒด (Real Subject)
class RealService : Service {
override fun operation(): String {
return "์ค์ ์๋น์ค์ ๋์ ๊ฒฐ๊ณผ"
}
}
// Proxy ๊ฐ์ฒด
class ServiceProxy(private val realService: Service = RealService()) : Service {
override fun operation(): String {
// ํธ์ถ ์ ๋ถ๊ฐ ๊ธฐ๋ฅ
println("Proxy: operation() ํธ์ถ ์ ")
// ์ค์ ๊ฐ์ฒด์ ์์
val result = realService.operation()
// ํธ์ถ ํ ๋ถ๊ฐ ๊ธฐ๋ฅ
println("Proxy: operation() ํธ์ถ ํ")
return result
}
}์ด์ ๊ฐ์ด Proxy ํจํด์ ํด๋ผ์ด์ธํธ์ ์ค์ ๊ฐ์ฒด ์ฌ์ด์์ ์ค๊ฐ์ ์ญํ ์ ์ํํ๋ฉฐ, ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ(์: ๋ก๊น , ์บ์ฑ, ๋ณด์ ๊ฒ์ฌ ๋ฑ)์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋๋ก ๋์ต๋๋ค.
Last updated