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

blowinds32님의 프로필 이미지
blowinds32

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

Interface를 이용한 다형성 매핑을 실무에서는 어떻게 풀어나가나요?

작성

·

701

1

안녕하세요, 선생님(?). 영한님의 온라인 팬인 스프링 주니어 백엔드 개발자입니다.

영한님의 교재와 ORM관련 강의를 듣고, 열심히 사내에서 적극적으로 도입하자고 강추한 결과

실무에 도입을 할 기회가 생겨서 적용하고 있습니다 ! (뿌듯)

-----------

인터페이스를 통한 다형성의 경우에는 JPA 스펙에서 지원하지 않는 것으로 알고있는데요,

강의에 나온 예제 도메인과 같이 (Item, Book ... 등등) 공통적으로 묶어줘야 할 데이터가 있는 경우에는 abstract class를 통한 부모-자식 상속관계로 표현하는 것이 맞다고 생각하나,

이는 자식 클래스가 부모 클래스에게 강하게 결합되기 때문에 다양한 타입의 객체가 수행해야 할 책임을 묶는 경우에는

'인터페이스를 통해서 다형성을 구현하는 것이 더 맞지 않나?'라고 생각해서 질문드리게 되었습니다.

그러면, 실무에서는 JPA를 사용해서 도메인 객체를 표현할 때 인터페이스는 사용하지 않는지 궁금합니다.

혹은  사용하려면 이러한 문제를 실무에서는 어떻게 풀어나가는지에 대해서도 궁금합니다.

-----------

항상 질 좋은 강의 들을 수 있게 해주셔서 감사합니다.

- 영한님의 온라인 팬 주니어 개발자 -

답변 1

2

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

안녕하세요. blowinds32님^^

먼저 실무에 새로운 기술을 도입하는 것이 쉽지 않은데, blowinds32님은 팀의 신뢰를 받으시는 분이라 생각합니다.

질문하신 내용대로 JPA에서는 인터페이스를 통한 다형성을 지원하지 않습니다. 그래서 추상 클래스까지가 한계입니다. 그래서 도메인 객체를 표현할 때도 인터페이스를 사용하지 않습니다.

JPA는 아무래도 메시지로 통신하는 객체 지향의 특성 보다는, 관계형 DB의 데이터를 매핑하는 것이 중요하기 때문에 인터페이스나 메시지 기반의 데이터 없는 설계와는 그 모양이 맞지 않는다 생각합니다. 그리고 제 경험상 실무에서 엔티티에 다형성을 사용하는 경우는 상당히 드문 경우에 발생합니다.

그리고 이런 경우 JPA 상속관계를 사용해야 하는데요. 단순히 데이터를 DB에 저장할 필요가 없는 JPA가 아닌 객체들은 인터페이스 기반의 상속관계나, 전략 패턴을 적용하기가 참 쉬운데, JPA는 DB 데이터까지 신경을 써야 하기 때문에 사실 상속관계를 사용하기가 참 까다롭습니다. 그래도 꼭 필요한 부분이 있으면 추상 클래스 레벨로 적용하시면 됩니다^^

추가로 엔티티에도 인터페이스를 적용할 수 있습니다. 해당 인터페이스로 JPA에서 조회만 안되는 것이지 구체 클래스나 추상 클래스로 조회한 다음에 해당 인터페이스의 메서드를 호출하는 것은 가능합니다.

도움이 되셨길 바래요^^

blowinds32님의 프로필 이미지
blowinds32

작성한 질문수

질문하기