작성
·
186
6
1. 강의 13:24 경입니다.
현재 memberService가 먼저 생성되었으므로
memberSerivce내의 memberRepository(A)가 있을 것이고
그이후에 memberRepository(B)가 새로 할당되었는데요.
afterEach에서는 B의 clearStore가 이루어졌는데
밑에서 테스트는 memberService의 A로 수행하고 있는데 어떻게 테스트가 정상적으로 작동하는 것인지 잘 이해가 안갑니다.
즉 B의 store가 초기화 된 것이지 A의 store가 초기화 된 것은 아닐텐데...둘이 이름이 같으면 new로 할당해도 같은 객체를 참조하나요? (MemberService 클래스에서 memberRepository(A)가 final 로 선언되어서 그런 건가요? store가 static인 것과는 별개라고 생각했는데 store가 static이기 때문인가요?)
2. 저는 아래와 같이 memberService클래스에 clear메소드를 또 추가하고 Test에서 afterEach로 매번 초기화해주는 방식을 구현했는데 실무에서 이런방식은 문제가 될까요?
MemberService.java
MemberServiceTest.java
감사합니다.
답변 2
2
안녕하세요. 학생님
1. 맞습니다. static이기 때문에 그렇습니다.
2. 리포지토리 자체를 서비스에서 초기화 하는 것은 좀 어색한 것 같아요. 서비스 로직에서 데이터베이스를 초기화 해야 하는 책임을 가지는 것이 적절하지 않다는 생각이 듭니다^^ 그리고 MemberService에서 다운케스팅을 사용하셨는데요. 다운케스팅은 좋은 객체지향 설계 원칙중에 DIP 원칙을 어기기 때문에 좋은 방법은 아닙니다. 좋은 객체 지향 설계 원칙에 대해서는 스프링 핵심 원리 강의를 참고해주세요.
감사합니다.
1
1.질문 정정하겠습니다. class에서 static으로 선언한 멤버는 인스턴스가 다르더라도 인스턴스끼리 같은 주소(초기에 할당된 static 변수)를 공유하게 되기 때문인가요?