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

학생님의 프로필 이미지

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 서비스 테스트

질문있습니다.

작성

·

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

    public void clear(){
        ((MemoryMemberRepository)memberRepository).clearStore();
   }

MemberServiceTest.java

    @AfterEach
    void clear(){
        memberService.clear();
   }

감사합니다.

답변 2

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 학생님

1. 맞습니다. static이기 때문에 그렇습니다.

2. 리포지토리 자체를 서비스에서 초기화 하는 것은 좀 어색한 것 같아요. 서비스 로직에서 데이터베이스를 초기화 해야 하는 책임을 가지는 것이 적절하지 않다는 생각이 듭니다^^ 그리고 MemberService에서 다운케스팅을 사용하셨는데요. 다운케스팅은 좋은 객체지향 설계 원칙중에 DIP 원칙을 어기기 때문에 좋은 방법은 아닙니다. 좋은 객체 지향 설계 원칙에 대해서는 스프링 핵심 원리 강의를 참고해주세요.

감사합니다.

1

학생님의 프로필 이미지
학생
질문자

1.질문 정정하겠습니다. class에서 static으로 선언한 멤버는 인스턴스가 다르더라도 인스턴스끼리 같은 주소(초기에 할당된 static 변수)를 공유하게 되기 때문인가요?

학생님의 프로필 이미지

작성한 질문수

질문하기