https://sundaland.tistory.com/206
[ ▶ Delegate ]
델리게이트 (Delegate)는 객체 지향 프로그래밍에서 특정 작업이나 책임을 다른 객체에 할당하는 디자인 패턴을 지칭하는데 자주 사용된다. 즉, 어떤 작업을 직접 처리하는 대신, 클래스나 메서드가 그 책임을 다른 객체에 위임하는 것이다.
- Delegated Object : 위임받은 객체는 실제로 작업을 수행하는 객체이다. 이 객체는 자신에게 위임된 기능을 처리할 책임이 있다.
- Delegating Object : 위임하는 객체는 작업을 수행하라는 요청을 받지만, 이를 직접 처리하는 대신 델리게이트 객체에 그 책임을 넘긴다.
[ ▷ 스프링 AOP에서의 델리게이트 ]
스프링 AOP 맥락에서 델리게이트는 특히 DelegatingIntroductionInterceptor와 같은 클래스에서 중요한 역할을 한다. 여기서 델리게이트는 도입된 (또는 인터페이스) 기능의 메서드를 실제로 구현하는 객체를 의미한다.
- Automatic Delegation : 만약 클래스가 DelegatingIntroductionInterceptor를 상속하고 도입할 인터페이스를 구현하면, 그 클래스 자체가 델리게이트 역할을 한다. 즉, 서브클래스가 도입된 인터페이스의 메서드를 처리한다.
- Explicit Delegation : 대안으로, 델리게이트는 별도의 객체일 수 있다. 이 경우 DelegatingIntroductionInterceptor 클래스는 이 별도의 객체를 델리게이트로 사용하도록 구성되어, 도입된 인터페이스 메서드를 처리한다.
[ ▷ 예제 ]
public class MyIntroductionInterceptor extends DelegatingIntroductionInterceptor implements MyInterface {
// MyInterface의 메서드 구현
}
이 예제에서, MyIntroductionInterceptor 클래스는 DelegatingIntroductionInterceptor를 상속하고 직접 MyInterface를 구현한다. 결과적으로 이 클래스는 스스로 델리게이트 역할을 하며, 도입된 인터페이스 메서드를 직접 처리하게 된다.
이와 같은 방식으로 델리게이트를 사용하면 객체의 기능을 확장하거나 특정 작업을 다른 객체에 위임할 수 있어 코드의 응집력과 재사용성을 높일 수 있다.