프록시 주요 기능
접근 제어
인증, 인가
캐싱
지연 로딩
부가 기능 추가
예) 요청, 응답 값 변형
예) 로그 기능
GoF 디자인 패턴에서는
의도에 따라 프록시 패턴과 데코레이터 패턴으로 구분
프록시 패턴 : 접근 제어가 목적
데코레이터 패턴 : 기능 추가가 목적
데코레이터 패턴
인터페이스 기반 프록시 vs 클래스 기반 프록시
클래스 기반 프록시
부모의 생성자를 호출해야함
해당 클래스에만 적용할 수 있음
클래스, 메서드에 final이 붙으면 상속이나 오버라이딩에 제약이 생김
인터페이스 기반 프록시
인터페이스를 구현해야함
캐스팅 관련 단점이 존재 - 이후 설명
이론적으로는 모든 객체의 역할과 구현을 분리하여 인터페이스를 구성하는 것이 좋으나 실무에서는 변경할 일이 거의 없는 클래스도 존재함 따라서 무작정 인터페이스를 구현할 필요는 없다
문제점: 프록시가 너무 많음
target 객체에 따라 프록시를 하나씩 할당해주어야 하므로 프록시 객체를 너무 많이 생성하게함
동적 프록시로 해결