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

전지윤님의 프로필 이미지
전지윤

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

실전 예제 4 - 상속관계 매핑

선생님 안녕하세요 abstract 를 붙히는 이유을 좀 여쭤볼 수 있을까요??

작성

·

403

1

Item 엔티티에 abstract를 붙히는 것과 안붙히는 것의 차이를 좀 여쭤볼 수 있을까요?... .. abstract를 붙히신 이유를 좀 여쭙고 싶습니다..

답변 3

1

안녕하세요. 전지윤님, 공식 서포터즈 OMG입니다.

추상클래스에 관한 질문이네요.

추상클래스는 자바의 기본 내용 중 하나로 강의에서는 자바 기초는 선수지식으로 정의하고 진행됩니다.

제가 abstract 를 붙히는 이유에 대해 설명을 드릴수 있지만 그러면 "기억에 오래 남을까?"라는 의문이 드네요.

잘 정리된 포스팅 첨부하오니 강의코드와 함께 학습 하시길 바라며 아래 내용으로도 부족하면 추가적인 자료를 찾아 학습하신 후에도 이해가 안된다면 참고하신 자료와 함께 질문 글 남겨주세요.

[JAVA] 자바 추상클래스란? (tistory.com)

감사합니다. 

전지윤님의 프로필 이미지
전지윤
질문자

답변 감사합니다!!... Movie Album Book의 공통된 필드를 Item이란 추상클래스에 정의하고 이를 상속받게 했다 이런식으로 이해하면 될런지요..ㅠ 그리고 추상클래스가 아닌 일반클래스를 상속받게 해도 똑같이 동작할까요?ㅠㅠ.. 답변해주셔서 감사합니다

 Movie Album Book의 공통된 필드를 Item이란 추상클래스에 정의하고 이를 상속받게 했다 이런식으로 이해하면 될런지요..ㅠ

=>

네 맞습니다. 하지만 이 부분은 일반클래스의 상속의 특징에 해당하는 내용이기도 하죠.

추가적으로 영한님께서는 강의 중에 BaseEntity와 같이 직접 만들어서 사용할 일 없는 경우에는 만일에 발생할 실수를 방지하기 위해 추상클래스로 만들어 사용하길 권장하셨습니다.

 

그리고 추상클래스가 아닌 일반클래스를 상속받게 해도 똑같이 동작할까요?ㅠㅠ..

=>

상속관계 매핑 전략을

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 

로 하신후 

abstract를 선언한것과 안한 것의 쿼리 실행 결과를

비교하시면 차이점이 보이실꺼에요.

한번 직접 시도해보시겠어요?

시도 하신 후 알게 된 사실을 알려주세요.

차이점이 없다고 생각하시면 그렇다고 답변해주셔도 좋습니다.

답변 해주시면 저도 답변 드릴게요.

전지윤님의 프로필 이미지
전지윤
질문자

안녕하세요 OMG선생님

abstract 가 붙은 클래스는 객체 생성도 안되구요...

 테이블도 안생성되는거 같습니다!....

1. new로 객체 생성이 안되는 것은 추상클래스의 특성입니다.

2. 궁금해 하시는 abstract가 붙은 것과 안 붙은 것의 차이는 영한님이

https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21705?tab=curriculum

27분에 상황을 보여주고 계십니다.

확인해보시겠어요?

전지윤님의 프로필 이미지
전지윤
질문자

안녕하세요 OMG선생님 늦게확인해서 죄송합니다 ㅠㅠ,,, Item 테이블만 조회 할 일이 없으니 abstract 엔티티로 만들고 이를 상속받게 했다,,,, 이렇게 이해가 되는거 같습니다 자세한 답변 항상 감사합니다!!,,

추상으로 선언하면 Item 클래스를 직접 적으로 생성하는 것이 막을 수 있기 때문에 추상으로 선언하는 것이 좋은 이유이기도 합니다.

0

6:15 초 보면 추상 클래스더라도 item 테이블은 생성되지만, new Item 처럼 음 객체를 생성할 수 없게 막아놓는다 라고 생각하면 되나요?

0

안녕하세요 abstract가 붙은 item클래스 관련해서 궁금한점이 생겨서  여기에 질문을 남겨봅니다.

1.   abstract가 붙은 클래스와 mappedsuperclass 어노테이션이 붙은 클래스 둘 사이의 구체적인 차이를 알수있을까요?

abstract가 붙은 item클래스를 상속할때는 db에 item 테이블은 생성이 되지만(@Entitiy가 있다는 가정, join전략사용 가정) 해당 테이블에는 item타입의 객체가 들어가지 못하는 대신 item의 자식클래스로부터 생성된 객체가 들어가는것으로  이해했고

mappedsuperclass가 붙은 클래스는 db에 테이블이 생성되지  않고 속성만 공유해준다고 이해했는데 혹시 틀린부분이 있을까요?

전지윤님의 프로필 이미지
전지윤

작성한 질문수

질문하기