작성
·
291
·
수정됨
0
의존성에 대해 갑자기 헷갈려서 총 4가지 질문드립니다.
MemberService에 아래와 같은 메서드(Member findMemberById(Long id))가 있고 PostService(다른 Service 클래스)에서 memberId로 Member를 조회해야 할 일이 있습니다. 이 경우 아래 메서드를 이용하기 위해 PostService 클래스에서 private final MemberService memberService 형태로 멤버변수로 포함한다고 가정하겠습니다.(memberService.findMemberByMember(id) 로 이용하기위해)
public Member findMemberById(Long id) {
return memberRepository.findById(id)
.orElseThrow(() -> new BusinessLogicException(MEMBER_NOT_FOUND));
}
Q1) PostService에서 MemberService를 생성자 주입을 통해 받아서 이용할 경우 MemberService의 의존성(예를 들면 MemberRepository 등의 MemberService 클래스에서 사용하는 클래스들)까지 PostService에 포함되는 것일까요?
Q2) 의존성이라는게 단순히 생성자 주입으로 받았던 멤버 클래스들 뿐 아니라 내부 메소드에서 매개변수로 받은 클래스가 있다면 이 또한 의존성인가요?(import 로 포함된 클래스들을 모두 의존클래스로 보면 될지, 아니면 내부에서 사용하는 모든 객체를 의존성으로 보면될지 >> 같은 패키지의 경우 import 안하는걸 고려했을때 내부에서 객체로 이용하지만 같은 패키지라 import 안되는걸 고려)
Q3-1) Q1의 답변에서 MemberService의 의존성까지 PostService에 포함되는 거라면 PostService에서 Member를 조회하기 위해서는 memberService.findMemberById(id) 로 조회하기 보단 MemberRepository를 주입받아서 memberRepository.findById(id).orElseThrow(() -> new BusinessLogicException(MEMBER_NOT_FOUND)); 형태로 변경하는게 맞을지?
Q3-2) Q1의 답변에서 MemberService의 의존성까지 PostService에 포함되는게 아니라면 PostService에서 MemberService가 아닌 MemberRepository로 조회하는게 맞을지? Member 조회가 여러곳에서 사용되고 Member findMemberById(Long id) 메소드의 내용이 여러곳에서 중복되는 걸 생각했을때
처음에는 단순히 member 조회가 여러곳에서 일어나고 공통된 내용이 반복되어 MemberService의 findMemberById 로 묶어서 사용하는게 맞다고 생각했는데 의문이 들었고 예전에 의존성은 최대한 줄이라고 하셨던게 생각나서 질문드립니다.
답변 1
1
안녕하세요. pj5016님
Q1, Q2: 의존성이라는 것은 클라이언트에서 직접 의존하는 것, 그러니까 import에 사용되는 것에 의존한다고 보시면 됩니다. 가장 쉬운 예시는 특정 코드를 삭제했을 때 영향을 받는다면 그게 바로 의존성입니다.
Q3, Q4: 이 부분은 선택입니다. PostService에 MemberService를 제공해도 되고, MemberRepository를 제공해도 됩니다. MemberService를 제공하는 장점은 특정 비즈니스 로직이 있는 경우 MemberService만 수정해도 된다는 장점이 있습니다. 그런데 비즈니스 로직이 거의 없고, 정말 단순하게 엔티티만 조회해야 한다면 단순하게 MemberRepository를 사용하는 것도 괜찮습니다.
감사합니다.