inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

타입을 MemberRepository로 할때와 MemoryMemberRepository로 할때의 차이점이 뭔가요?

388

민첩한 북극곰

작성한 질문수 1

0

MemoryMemberRepository repository = new MemoryMemberRepository();

MemberRepository repository = new MemoryMemberRepository();

두 타입으로 설정했을때의 차이가 알고싶어요.

java spring mvc spring-boot

답변 2

0

OMG

안녕하세요. 민첩한 북극곰님, 공식 서포터즈 OMG입니다.

repository의 타입이 인터페이스라면(MemberRepository) 이후 구현체의 타입이 MemoryMeberRepository가 아닌, 다른 타입의 Repository(Ex) JPAMemberRepository로의 변경이 용이합니다. 왜냐하면 MemoryMemberRepository와 JpaMemberRepository 모두 MemberRepository라는 인터페이스를 구현한 클래스이기 때문입니다.

이러한 다형성의 특징을 본 강의 후반부에 다루는 Repository를 변경하면서 느끼실 수 있습니다 😀

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

민첩한 북극곰님의 질문은 특정 클래스(MemoryMemberRepository)로 선언하거나 인터페이스(MemberRepository)로 선언할 때 각각의 차이가 무엇인지에 대한 궁금증과 연결되는 것 같습니다.

인터페이스로 선언하는 경우에는 다형성의 이점을 활용할 수 있습니다. 즉, MemberRepository 인터페이스를 구현하는 모든 종류의 리포지토리를 해당 변수에 할당할 수 있으며, 이는 코드의 유연성을 증가시켜줍니다. 예를 들어 나중에 MemoryMemberRepository 대신에 다른 저장소 구현체(예를 들어, JdbcMemberRepository)를 사용하기로 했을 때, 인터페이스로 선언된 부분은 변경할 필요가 없이, 구현체만 교체함으로써 쉽게 변경을 할 수 있습니다.

반면에 구체적인 클래스(MemoryMemberRepository)로 선언한 경우 해당 클래스의 메서드들에만 접근이 가능합니다. 이 경우에는 인터페이스에 없는 특정 메서드들(예를 들어 MemoryMemberRepository만의 메서드)에 접근을 할 수 있다는 장점이 있지만, 다른 구현체로의 교체가 불편하거나 불가능해질 수 있습니다.

이와 유사한 질문들에 대한 답변들을 이전에 인프런에서 다뤄본 바가 있으니, 해당 내용을 참고하시면 더 많은 정보를 얻을 수 있으실 것입니다.

해당 링크들은 인터페이스와 클래스 선언의 차이점 및 인터페이스를 사용하는 장점에 대한 설명을 담고 있으며, 질문자님이 궁금해하시는 부분에 대해 좀 더 깊이 이해할 수 있는 내용을 제공할 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

..

0

76

2

Unused property.....

0

102

2

project JDK is misconfigured

0

132

2

외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석

0

83

2

단위/통합 테스트 버전충돌 문제

0

91

2

❗️springboot 4.0.2 버전 aspectj dependency 설정❗️

0

230

1

왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?

0

104

2

윈도우 build test오류 질문

1

103

2

테스트 관련 공부에 대한 조언을 얻고 싶습니다

0

101

2

테스트 실행 시 에러 질문

0

292

1

name을 통한 비교와 객체를 통한 비교

0

77

1

빌드 후 libs 없음

1

129

1

윈도우 gradlew.bat 에러

0

168

1

@PostMapping("/members/new")가 동작하지 않습니다

0

90

1

java static class와 kotlin class

0

79

1

스프링 DB연결

0

127

1

소요 시간

0

87

2

ddl.sql에 빨간 밑줄

1

102

2

welcome page 에러

0

183

3

잘 모르겠습니다.

0

164

2

fail을 똑같이 쳤는데 오류가 발생해요

0

157

2

index.html Welcome page

0

125

1

프로젝트 gradle-groovy ?

0

370

1

테스트코드 메서드명 한글

0

202

2