구체적인 구현 코드는 제거했을지라도 위임을 통해 기능을 사용하는 코드는 핵심 코드와 함께 남아있다.
트랜잭션 기능 → 비즈니스 로직과 성격이 다르기 때문에 아예 그 적용 사실 자체를 밖으로 분리
→ UserServiceTx 를 만들었고 UserServiceImpl 에는 트랜잭션 코드가 하나도 남지 않게 된다.
문제는 이렇게 구성해도 클라이언트가 핵심 기능을 가진 클래스를 직접 사용하면 부가기능이 적용될 기회가 없다.
⇒ 부가기능은 자신이 핵심 기능을 가진 것처럼 꾸며서 클라이언트가 자신을 거쳐 핵심 기능을 사용하게 하자.
그러기 위해