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

퉁튱님의 프로필 이미지
퉁튱

작성한 질문수

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

회원 리포지토리 테스트 케이스 작성

질문이 있습니다!

해결된 질문

작성

·

120

0

안녕하세요. 좋은 수업 너무 감사드립니다!

수업을 듣다가 질문이 생겨서 글을 남깁니다!

강의 12:54 쯤에 MemberRepository repository = new MemoryMemberRepository(); 를

 MemoryMemberRepository repository = new MemoryMemberRepository(); 로 변경하시는데,  그 이유가 궁금합니다!

제가 아직 인터페이스에 대한 이해도가 부족하여, 인터페이스로 정의할 때와 차이가 있는지 궁금합니다.

감사합니다!

답변 2

4

답변 내용이 질문 내용과 관계 없어보이는데요

MemberRepository가 인터페이스를 참조하는 경우 인터페이스에서 정의된 메소드만 사용할 수 있는데요.

추가한 메소드인 clearStore()가 인터페이스가 아닌 이것을 구현한 클래스에 존재하기 때문에 찾지 못해서 MemoryMemberRepository 클래스를 참조하도록 바꿔준 거에요.

뒷부분을 미처 확인하지 못하고 인터페이스 사용에 대한 답변만 드리고 의도에 대해서는 잘못 설명하였네요.

정확하게 답변해주셔서 감사합니다.

퉁튱님의 프로필 이미지
퉁튱
질문자

그렇군요 !!! 두분 모두 답변 감사드립니다 !!!

1

안녕하세요. 퉁튱님, 공식 서포터즈 David입니다.
.

타입을 인터페이스(MemberRepository)로 선언하게 되면 해당 인터페이스를 구현하는 모든 구현체를 받을 수 있습니다.

만약 MemberRepository를 구현하는 JdbcMemberRepository, MemomryMemberRepository가 있다면 인터페이스(MemberRepository)로 선언된 곳을 수정하지 않고 Configuration만 수정하여 DI받아 각 구현체를 사용할 수 있습니다.

그러나 인터페이스가 아닌 특정 타입(MemomryMemberRepository)으로 선언하게 되면 해당 타입이 아닌 다른 타입(JdbcMemberRepository)을 MemmoryMemberRepository로 받을 수 없습니다.

.

언급하신 부분에서는 굳이 인터페이스 타입으로 선언할 필요가 없기 때문에 변경하신 것 같습니다.

.
감사합니다.

퉁튱님의 프로필 이미지
퉁튱
질문자

이해가 잘 되었습니다!

빠른 답변 감사합니다!!

아래 최지웅님 답변 참고 부탁드립니다.

제가 드린 답변에서 구현체 타입 사용에 대한 의도 설명이 잘못되었습니다.

퉁튱님의 프로필 이미지
퉁튱

작성한 질문수

질문하기