반응형
https://applepick.tistory.com/159
앞서 프록시 패턴과 데코레이터 패턴에 대해서 간단하게 정리해보았습니다. 공부하면서 인터페이스에 기반한 프록시와 클래시 기반의 프록시의 장단점을 비교해보려고 합니다.
- 인터페이스가 없어도 클래스기반으로 프록시를 만들 수 있습니다.
- 클래스 기반의 프록시는 해당 클래스만 적용시킬 수 있고, 인터페이스 기반 프록시는 해당 인터페이스만 같다면 전체적으로 적용해서 사용할 수 있습니다.
- 클래스 기반 프록시는 제약사항이 있습니다.
- 부모 클래스의 생성자를 반드시 호출해야 한다는 단점이 있습니다.
- 클래스에 final이 붙으면 상속이 불가능합니다.
- 메서드에 final이 붙으면 해당 메서드에 오버라이드를 할 수 없습니다.
참고로 프록시 객체는 IOC(스프링 컨테이너)가 관리하고 힙 메모리에도 할당합니다. 하지만, 프록시가 가르키는 실제 객체는 힙 메모리에 할당하지만, IOC(스프링 컨테이너)가 관리하지 않습니다. 실제 객체는 프록시 객체를 통해서 참조됩니다.
이렇게 보면 클래스 기반 프록시보다 인터페이스 기반 프록시를 적용하는 것이 좋아 보일 수도 있습니다. 인터페이스 기반 프록시의 단점은 인터페이스가 필요하다는 것입니다. 인터페이스를 도입하는 것은 구현을 변경 가능성이 있을 때 큰 장점을 가지기 때문인데, 실제로 구현이 거의 변경하지 않는 클래스들도 많습니다. 구현이 변경되지 않는 클래스에 무작정 인터페이스를 구현하는 것은 좋지 않다고 생각합니다. 인터페이스를 도입하는 이유가 여러 가지 있는데 여기서 핵심은 모든 클래스에 인터페이스가 필요 없다는 것입니다.
인터페이스 기반 프록시든 클래스 기반 프록시든 어찌 되었든 기존 코드를 건드리지 않고 기능을 추가할 수 있는 장점을 가지고 있습니다. 하지만, 예를 들어 200개의 프록시가 있다면 200개 모두 수정해야 하는 단점을 가지고 있습니다. 이러한 단점을 해결해주는 것이 바로 리플랙션(동적 프록시)기술입니다. 다음 시간에는 리플랙션에 대해서 정리해보겠습니다.
반응형
'혼자 공부하는 것들 > Spring' 카테고리의 다른 글
[Spring] @RequestBody는 객체로 받자! (0) | 2022.05.30 |
---|---|
Reflection(리플렉션) 활용 (0) | 2022.05.22 |
프록시 패턴과 데코레이터 패턴 (0) | 2022.05.10 |
템플릿 메서드 패턴 (0) | 2022.04.25 |
Spring에서 동시성 문제를 해결해보자! [+ThreadLocal] (1) | 2022.04.19 |
댓글