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

Truestar님의 프로필 이미지
Truestar

작성한 질문수

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

Mapped Superclass - 매핑 정보 상속

제네릭을 적용한 BaseEntity 응용에 관한 질문입니다.

해결된 질문

작성

·

570

0

명강의 남겨주신 김영한 강사님 Respect 합니다.
모든 JPA 강의는 패스했고 Spring MVC 고급편 듣고있습니다요. 좋은강의 감사드립니다.

제가 예제 응용시 BaseEntity 를 확장해보려고 예제 작성중에 몇가지 궁금증이 생겨 이렇게 질문을 남기게 되었습니다.

아래는 클래스 계층구조입니다.

위에서 BaseEntity 를 타입 파라미터를 적용하여 하위 엔티티를 추상 계층에서 핸들링 하기위해 아래와 같이 BaseEntity 에 제네릭을 적용 해봤습니다.
아래는 BaseEntity 선언부 입니다.

  1. public abstract class BaseEntity<T extends BaseEntity<T>>
  2. public abstract class BaseEntity<T extends BaseEntity<? extends BaseEntity<T>>>

여기서 너무나도 햇갈리게 되었는데요, 딱히 컴파일 시 애러가 나지는 않았음에도 불구하고, 초반에는 1번처럼 작성했다가, 나중에 2번으로 바꾸게 되었는데요, 이유는 와일드카드 ? 가 안전하다고 해서 적용하게 되었는데, 컴파일 애러는 안나지만 불안감이 들어서 질문하게 되었습니다.

사실,
이렇게 BaseEntity 제네릭타입 선언부를 수정하게 된 배경은 BaseEntity 를 바탕으로 BaseService 도 만들게 되었는데요
1번처럼 BaseEntity 작성시
서비스를 아래와 같이 작성해 보았더니 적용에 문제가 있었기 때문입니다.

public abstract class BaseService<E extends BaseEntity<E>, DTO> {

그래서 타입 E 를 와일드 카드를 적용했더니 아래와 같이 바꿨더니 문제가 없었습니다

public abstract class BaseService<E extends BaseEntity<?>, DTO> {

이 부분때문에 Entity 까지 손보게 되었던 것이었죠...
제네릭 너무너무 햇갈립니다. 선언하기 부터 맨붕이예요...
상속구조의 제네릭 클래스 예시를 찾기가 어려워 이렇게 남기게 되었습니다.

질문입니다.

  1. 위 BaseEntity 제네릭 적용에 두가지 선언 방식은 왜 다른걸까요...
    제눈에는 `BaseEntity 를 상속받은 타입` 이라는 논리가 같아보여서 질문하게 되었습니다.

  2. 강사님이시면 좀더 어떤 효과적인 방식으로 구성하실지 견해를 배우고 싶습니다.

몇번을 다시봐도 배울게 많은 강의 항상 고맙습니다.
읽어주셔서 감사드립니다.

답변 1

1

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

안녕하세요. Truestar님^^

BaseService의 개념은 이론상 좋아보이지만, 사실 실무에서 사용하기 좀 애매하다 생각합니다.

서비스에는 비즈니스 로직이 들어가는데, 이건 획일화 할 수 있는 것이 아니어서요.

제네릭에 대한 질문은 자바 기본 언어에 대한 부분이라 제가 답변 드리는 것 보다는, 관련 부분을 따로 학습하시는 것을 권장드립니다.

감사합니다.

Truestar님의 프로필 이미지
Truestar
질문자

네..부족한부분을 더 파야겠네요..

획일화가 어려운 이유가 구현상에 변수가 넘쳐나서 그런게 아닐까 생각이 들어요. 베이스 서비스는 구현 안하는 쪽으로 해야겠습니다

강사님 혹시 요즘 제네릭을 안쓰는 방향으로 한다는 예길 들었는데 혹시 이런상황에 대해 여줘도 될런지요..?

좋은말씀 감사드립니다!

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

제네릭을 안쓰는 방향으로 한다는 이야기는 처음 들어봅니다^^

Truestar님의 프로필 이미지
Truestar
질문자

역시나 그렇군요..

커뮤니티 어디서 제네릭 질문에 대한 신기한 답글을 보고 이건 어떤 상황인걸까 하고 잠깐 생각이 들었는데요..아마 SI 불구덩이 프로젝트 내부 이야기가 아닐까 조심스래 추측해봅니다^^

남은한주 더운데 몸조리 잘하시구요

답변 감사드립니다☺

Truestar님의 프로필 이미지
Truestar

작성한 질문수

질문하기