작성
·
184
0
답변 2
4
안녕하세요. 김동현님, 공식 서포터즈 David입니다.
.
1. 네, 맞습니다. 구체에 의존하지 않고 추상에 의존하여 유연함을 확보하기 위함입니다.
2.
MemberService가 생성자를 통해 MemberRepository를 주입받지 않았을 때,
MemberServiceTest 내 아래 2가지가 선언되어 있습니다.
MemberService memberService = new MemberService();
MemberRepository memberRepository = new MemoryMemberRepository();
MemberService내에서 생성된 MemoryMemberRepository를 A객체
MemberServiceTest 내에서 생성된 MemoryMemberRepository를 B객체 라고 하겠습니다.
A와 B객체는 서로 다른 객체입니다.
하나의 테스트가 실행될 때마다 서로 다른 두 객체(A, B)가 A는 MemberService 내 동작을 맡고 있고, B는 MemberServiceTest 내에서 테스트시 저장된 정보를 초기화하기 위해서 사용되고 있습니다.
즉, B라는 객체는 테스트가 실행된 후 A, B 객체가 공유하고 있는 static 변수인 store를 초기화시키기 위함입니다.
이는 서로 다른 객체(A, B)를 사용하고 있는 것입니다.
이제는 추상에 의존한 MemberService로 바뀐 코드가 적용되었을 때,
beforeEach()에서 내에서 MemoryMemberRepository객체를 생성했습니다. 생성된 객체를 A객체라 부르겠습니다. 또 beforeEach() 내에서 memberService 객체를 생성할 때 생성자의 인자로 A객체를 전달했습니다. 이로써 MemberService 내에 사용될 객체도 A이고, afterEach() 내에서 사용될 객체도 A가 되는 것입니다.
이전처럼 A, B가 생성되어 사용되지 않고, MemoryMemberRepository객체가 1개만 생성되어 MemberService에도 주입되어 사용되고, Test 내에서도 사용되는 것입니다.
혹시 이해가 잘 안되신다면 강의 14분부터 천천히 다시 들어보시면 좋을 것 같습니다.
.
감사합니다.
0
아하! 수정 전 MemberServiceTest 내에서 MemberService memberService = new MemberService();에 있는 new MemoryMemberRepository 1개와 MemoryMemberRepository memberRepository = new MemoryMemberRepository(); 이렇게 두개의 다른 객체가 생성되었는데 코드를 수정 후
@BeforeEach
public void beforeEach(){
memerRepository = new MemoryMemberRepository(); // 여기서 생성된 리포지터리 객체가. . memberService = new MemberService(memberRepository); // 여기에 대입되어 MemberServiceTest안에 하나의 리포지터리 객체가 있게 되었다 라는 것이 맞나요???
네, 맞습니다:)