OneToMany 관계 설정 시 필드 타입 설정은 뭘로 하나?

2024. 5. 28. 16:23·프로그래밍 언어/스프링부트

JPA에서 @OneToMany 관계를 위한 컬렉션 타입을 정의하는 방법에는 여러 가지가 있습니다.

1. Set (LinkedHashSet 사용):

private final Set<ArticleComment> articleComments = new LinkedHashSet<>();
  • 장점:
    • 컬렉션에서 요소의 유일성을 보장합니다 (중복 없음)
    • 컬렉션에 추가한 요소의 순서 유지 (삽입 순서)
    • LinkedHashSet은 삽입 순서를 기반으로 효율적인 검색 제공 ( HashSet 보다 빠름)
  • 단점:
    • 대량의 데이터 추가/삭제 시 성능이 최적화되지 않을 수도 있음

2. List (ArrayList 사용):

다른 일반적인 선택 방법입니다.

private final List<ArticleComment> articleComments = new ArrayList<>();
  • 장점:
    • 일반적으로 Set에 비해 대량의 데이터 추가/삭제 시 빠름
    • 인덱스로 요소에 접근 가능 (특정 순서 필요에 유용)
  • 단점:
    • 유일성을 보장하지 않음 (요소가 복제될 수 있음)
    • 기본적으로 삽입 순서 유지하지 않음 (요소가 섞일 수 있음)

3. 다른 Set 구현 클래스:

  • HashSet: LinkedHashSet과 유사하지만 삽입 순서를 유지하지 않고 검색 속도가 약간 더 빠를 수 있음 (사용 사례에 따라 다름)
  • TreeSet: 자연 순서 또는 사용자 정의 비교기를 기반으로 요소를 정렬된 순서로 유지합니다. 정렬을 기반으로 효율적인 검색이 필요한 경우 유용

적합한 컬렉션 타입 선택:

최적의 선택은 특정 요구 사항에 따라 달라집니다.

  • 유일성을 보장하고 삽입 순서를 유지해야 한다면 LinkedHashSet을 사용하세요.
  • 대량 작업 성능이 중요하고 순서가 중요하지 않다면 ArrayList을 사용하세요.
  • 정렬된 검색이 필요한 경우 TreeSet을 고려하세요.

추가 고려 사항:

  • JPA 페칭 전략 (예: EAGER vs. LAZY)은 컬렉션을 다룰 때 성능에도 영향을 미칠 수 있습니다.
  • 더 나은 유연성을 위해 Set 또는 List와 같은 구체적인 구현 클래스 대신 Collection이나 Iterable과 같은 인터페이스를 사용하는 것을 고려하세요.

각 접근 방식의 장단점을 이해함으로써 JPA에서 @OneToMany 관계에 대한 컬렉션 타입에 대한 올바른 결정을 내릴 수 있습니다.

저작자표시 (새창열림)

'프로그래밍 언어 > 스프링부트' 카테고리의 다른 글

Webflux - reactor 실습  (1) 2024.09.18
webflux - CPU Bound vs IO Bound  (3) 2024.09.17
Redis Pub/Sub과 Spring Boot를 활용한 실시간 알림 시스템 구현  (0) 2024.09.15
Spring Session  (0) 2024.09.15
'프로그래밍 언어/스프링부트' 카테고리의 다른 글
  • Webflux - reactor 실습
  • webflux - CPU Bound vs IO Bound
  • Redis Pub/Sub과 Spring Boot를 활용한 실시간 알림 시스템 구현
  • Spring Session
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (284)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (2)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 운영체제 (0)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (5)
        • 암호화폐 (5)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OOP
    AWS
    mybatis
    취업리부트
    FastAPI
    RDS
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    프로그래머스
    DP
    SAA
    spring
    WebFlux
    파이썬
    ecs
    항해99
    Spring WebFlux
    java
    EC2
    celery
    그리디
    백준
    Spring Boot
    시험
    자바
    reactor
    Docker-compose
    Redis
    Python
    완전탐색
    docker
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
OneToMany 관계 설정 시 필드 타입 설정은 뭘로 하나?
상단으로

티스토리툴바