프록시란 대리인이라는 의미입니다.
프록시 패턴(Proxy Pattern)은 객체에 대한 접근을 제어하거나, 추가적인 로직을 실행하기 위해 원래 객체를 대신하는 대리 객체를 사용하는 디자인 패턴입니다.
이 패턴을 사용하면 코드 변경 없이도 기존 로직에 부가적인 기능을 추가할 수 있습니다.
public class Doorman {
public void expel(Animal m) { // OCP
System.out.println(m.getName() + "쫓아내");
}
}
public class DoormanProxy { //DoormanProxy는 Doorman이 아니기 때문에 상속사용 X
// 멤버 변수에 넣고 생성자 주입을 통해 부가적인 로직을 처리
private Doorman doorman;
public DoormanProxy(Doorman doorman) {
this.doorman = doorman;
}
public void expel(Animal a) {
System.out.println("안녕~~");
doorman.expel(a); //생성자를 통해 주입한 멤버변수를 이용해
//코드의 변경 없이앞 뒤로 부가적인 로직을 처리 가능
System.out.println("잘가~~");
}
}
public class App {
public static void main(String[] args) {
Mouse m =new Mouse(); //mouse, animal -> Mouse 타입을 바라봄.
//쫓아내(m)에서 다시 Aniaml타입으로 들어간 것. 상관없다
DoormanProxy doormanProxy = new DoormanProxy(new Doorman());
doormanProxy.expel(m);
}
}
Doorman
객체의 코드를 변경하지 않고 그 앞 뒤로 연산을 추가해줄 수 있다.
Doorman
객체를 내부적으로 가지고 있으며, 프록시 역할을 합니다.
이 클래스는 Doorman
을 상속하지 않고 생성자 주입을 통해 Doorman
객체를 포함하고 있으므로
프록시 패턴의 원칙을 따르고 있습니다.
프록시 패턴 사용 예시
- 접근 제어 : 특정 객체에 대한 접근을 제한하거나 제어할 때 사용합니다.
- 로깅 또는 감사 : 메서드 호출 전후에 로그를 남기거나 감사 작업을 수행할 때 사용합니다.
- 지연 초기화(Lazy Initialization) : 실제 객체의 초기화 비용이 클 경우, 프록시가 대신 처리하다가 필요할 때 실제 객체를 생성합니다.
AOP
관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)은 소프트웨어 개발에서 핵심적인 비즈니스 로직(핵심 관심사)과 부가적인 로직(횡단 관심사)을 분리하여 코드를 모듈화하는 방법론입니다.
이를 통해 개발자는 핵심 로직에 집중할 수 있고, 부가적인 로직은 별도로 관리할 수 있습니다.
AOP는 주로 프록시 패턴을 사용하여 부가적인 로직을 처리합니다. 프록시 객체는 실제 객체를 대신하여 요청을 받아 처리하며, 이 과정에서 부가적인 로직을 추가할 수 있습니다.
예를 들어, 메서드가 호출되기 전후에 특정 작업(예: 로깅)을 추가하고 싶다면, 프록시가 메서드를 호출하기 전후에 이러한 작업을 수행할 수 있습니다.
AOP
는 관점 지향 프로그래밍을 통해 핵심 로직에 집중할 수 있게 해주며, 부가적인 로직을 프록시를 이용해 효과적으로 처리합니다.Share article