인프런 커뮤니티 질문&답변

pj5016님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 고급편

JDK 동적 프록시 - 예제 코드

동적 프록시 SRP

22.04.17 14:56 작성

·

422

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
평소 SRP는 클래스는 하나의 책임을 가져야 한다. 즉, 클래스를 변경하는 이유는 하나여야 한다 정도로 알고있었습니다.
p.12 에서 '결과적으로 프록시 클래스를 수 없이 만들어야 하는 문제도 해결하고, 부가 기능 로직도 하나의 클래스에 모아서 단일 책임 원칙(SRP)도 지킬 수 있게 되었다.' 라는 부분에서 '부가 기능 로직도 하나의 클래스에 모아서 단일 책임 원칙(SRP)도 지킬 수 있게 되었다' 는 내용이 잘 이해가 되지 않습니다.
 
유지보수를 위해 변경지점을 한곳으로 모아야 한다는것은 이해했지만
기존의 프록시 클래스들도 변경이유는 부가기능 같은 하나의 이유라고 생각해서 SRP 를 만족하지 않을까 라는 생각을 했습니다. 이 부분과 SRP관련해서 제가 잘못 알고있는게 있는지 알 수 있을까요?
 

답변 2

7

프랑이야님의 프로필 이미지

2022. 04. 18. 23:20

나중에 강사님이나 더 잘하시는 분이 답변다시겠지만, 제가 이해한 바로는 이렇습니다.

 

동적 프록시를 적용하기 전에는, 어떤 클래스의 메소드에 시간 측정 기능을 프록시로 구현하기 위해서 해당 클래스의 프록시 클래스를 만들고 프록시 클래스에다가 시간 측정 로직을 추가했습니다

하지만 이렇게 직접 프록시 클래스를 만들면, 시간 측정 기능을 추가해야 되는 클래스가 100개 이면 해당 

100개의 프록시 클래스를 직접 만들고 시간 측정 기능을 100개의 프록시 클래스에다가 중복으로 추가해야 됩니다

 

하지만 동적 프록시 기술을 사용하면 강사님이 말씀하셨다시피, 프록시 클래스를 수 없이 만들어야 하는 문제도 해결하고, JDK 동적 프록시의 경우 invocationHandler 구현체에다가 프록시 클래스에 적용할 로직을 구현하면 됩니다

그러면 동적 프록시를 사용하기 전에 있던 100개의 프록시 클래스에 있던 시간 측정 로직이 한 개의 invocationHandler 구현체에 들어가서 향후 변경이 있을 때 간편하게 변경 가능합니다

0

개발하는쿼카님의 프로필 이미지

2023. 01. 16. 12:17

안녕하세요

pj5016님 제가 이해하고있는 지식이 도움이 되고자 답변 드립니다.

 

부가 기능 로직도 하나의 클래스에 모아서 단일 책임 원칙(SRP)도 지킬 수 있게 되었다. 부분이 이해가 잘 안되신다고 말씀하셨는데, 제가 이해한 내용은 다음과 같습니다.

기존에는 동일한 기능(로그 추적)을 하는 클래스를 구현했습니다. (이 말은 현재 동일한 기능을 하는 여러개의 클래스를 구현하고 있다는 의미 입니다.)

하지만 동적 프록시 기술을 사용함으로써 동일한 기능을 하는 클래스를 1개만 만들고 관리할 수 있다는 의미로 SRP를 지킬 수 있다고 말씀하신 것 같네요.

(동일한 기능을 하는 클래스를 여러개 만들 필요는 없으니까요ㅎㅎ)

 

감사합니다.

pj5016님의 프로필 이미지

작성한 질문수

질문하기