• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

24.02.20 16:30 작성 조회수 205

0

MemoryMemberRepository repository = new MemoryMemberRepository();

MemberRepository repository = new MemoryMemberRepository();

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

답변 2

·

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2024.02.20

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

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

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

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.20

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

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

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

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

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

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

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