**프록시(Proxy)**와 **파사드(Facade)**는 애플리케이션 아키텍처 구축 시 서로 다른 문제를 해결하는 구조적 디자인 패턴입니다.
프록시는 객체의 대리자 또는 "대신하는 것" 역할을 합니다. 그 임무는 접근을 제어하고, 캐시를 관리하며, 지연 로딩을 구현하고, 보안을 조정하거나 요청을 분배하는 것입니다(예: 네트워크 프록시, 보안 프록시). 프록시는 실제 객체와 동일한 계약(인터페이스)을 구현합니다.
Java 예제:
public interface Service { void operation(); } public class RealService implements Service { public void operation() { // ... } } public class ProxyService implements Service { private RealService realService = new RealService(); public void operation() { // 접근 검사 realService.operation(); } }
파사드는 복잡한 하위 시스템을 숨기고 단일화된 단순한 인터페이스를 제공하는 패턴입니다. 파사드는 접근 제어나 추가 로직을 처리하지 않으며 단지 호출을 집계합니다.
Java 예제:
public class PaymentFacade { private CardService card; private SmsService sms; public void pay() { card.check(); card.charge(); sms.notify(); } }
언제 사용해야 하나요:
주요 특징:
파사드 패턴이 하위 시스템의 기본 클래스 이상의 기능을 추가하는 것이 허용되나요?
아니요, 파사드는 단순히 호출을 집계하고 단순화할 뿐이며, 새로운 기능은 다른 패턴이나 새로운 서비스에서 구현됩니다.
프록시는 목표 객체에서 상속받아야만 하나요?
아니요, 프록시는 목표의 인터페이스를 구현하지만, 종종 조합(실제 객체를 캡슐화)을 사용하고 상속을 사용하지 않기도 합니다.
파사드를 사용하여 접근 권한 관리나 오류 로그를 관리할 수 있나요?
이 경우에는 프록시를 사용하는 것이 좋습니다. 파사드는 캐싱, 로깅 또는 권한 검사를 기본적으로 지원하도록 설계되지 않았습니다.