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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

값 타입 컬렉션

값 타입 컬렉션 정말 쓰면 안되나요??

작성

·

337

0

안녕하세요 영한님! 질문이있어서 찾아왔습니다.

현재 프로젝트를 진행중인데

한줄로 요약하면 기준 영양 성분에 맞추어 부족,과잉 영양분을 판별해 주는 프로젝트입니다.

저는 기준 영양성분을 ENUM 타입으로 관리하자는 입장이였습니다.

그 이유는

1) 저희 서비스는 적정영양성분 부족과잉을 판별 하는데 매번 DB를 조회해서 findProperAmountByName("단백질") 을 매번 같은 적정량을 조회하는 게 부담스럽다.

=> Enum 타입으로 탄수화물의 적정량을 넣어두면 훨씬 편하게 조회할 수 있을 것이다.

2) findProperAmountByName("단백질") 은 현재 코드만으로는 DB에 어떤 영양소가 있는지도 모르고 확인하기 어렵다. ENUM 타입으로 묶으면 CARBON_HYDRATE,PROTEIN 등등 이렇게 묶어서 편하게 관리할 수 있다.

이렇게 생각하고 또 개발을 진행중에 있었습니다.

그러던 와중에 "영양제" 라는 컨텐츠에 탄수화물, 단백질 이 부족할 때 좋은 영양제라는 의미로 "탄수화물","단백질" 이라는 키워드를 쓰고 싶을 때

<아래는 영양제 칼럼>

@ElementCollection(targetClass = StandardNutrient.class)
    @JoinTable(name = "StandardNutrient",joinColumns = @JoinColumn(name = "drug_id"))
    @Column(name ="StandardNutrientName", nullable = false)
    @Enumerated(EnumType.STRING)
    private Set<StandardNutrient> efficientNutrient = new HashSet<>();

이렇게 쓰고 싶은 마음이 굴둑 같습니다.

이렇게 했을 때 발생할 수 있는 단점에 대해 알고 싶습니다. (StandardNutrient는 Enum 타입입니다. )

1) 일단 StandareNutrient 의 종류가 바뀔일이 절대 없습니다!

2) 이 서비스의 Manager 만 영양제를 등록할 수 있습니다.

3) List 대신 Set 을 사용함으로써 다 delete 한이후 insert 하지도 않습니다.

어떻게 생각하시나요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. dionisos198님의 질문에 대해 유사한 상황을 다룬 지식공유자의 답변을 찾아보았습니다.

dionisos198님께서 직면하신 문제는 Enum과 값 타입 컬렉션(@ElementCollection)의 사용에 관한 고민으로 보입니다. 특히, Enum을 사용하여 영양소의 적정량을 관리하고자 하는 상황에서 발생할 수 있는 이점과 단점, 그리고 구현 방법에 대한 고민이 있으신 것 같습니다.

해당 주제와 밀접한 내용을 다룬 답변으로는 김영한님의 다음 답변을 추천드립니다:

이 답변에서 다루고 있는 핵심적인 내용은 다음과 같습니다:
- Enum과 @ElementCollection 사용 시 고려할 사항: Enum 타입을 사용할 때 데이터 변화가 잦지 않고, 정해진 범위 내에서 관리되어야 하는 경우 유용하게 사용할 수 있습니다. 하지만 Enum 값이 변경되거나 확장될 때는 다소 유지 보수적인 측면에서 고민이 필요할 수 있습니다.
- 값 타입 컬렉션의 단점과 해결 방법: 값 타입 컬렉션을 사용할 때 발생할 수 있는 문제점과 이를 최적화하기 위한 전략에 대해 설명합니다. 특히, @ElementCollection을 사용할 때 발생할 수 있는 성능 문제와 이를 해결하기 위한 접근법에 대해 조언하고 있습니다.

김영한님은 JPA의 이해와 실무 적용에 관한 다양한 조언을 제공하시기 때문에, dionisos198님의 경우와 관련된 고민에 도움이 될만한 통찰을 얻을 수 있습니다.

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

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기