Spring/Kotlin

[Kotlin + Springboot + JPA] Entity 생성에 관하여.

For_HW 2021. 7. 28. 01:28

무작정 코틀린에 대해서 접하였고 기본적인 문법을 공부하고, 간단한 게시판CRUD를 만들면서 참고할만한 글들을 찾아보는데 
어떠한 글은 Entity 생성시 data class 를 사용하는 글과, 일반 class를 사용하는 경우가 다양하여서 한번 무슨차이가 있을지 정리해보고 싶었다.


우선 data class 가 뭔지 살펴보자!!

 

간단한 정보만 정리해보면,

https://kotlinlang.org/docs/data-classes.html 

 

data 를 저장하기 위한 클래스라고 한다.

 

컴파일러가 자동으로 primary constructor 의 properties 로 부터 아래의 멤버들을 생성한다.

  • equals() / hashCode()
  • toString();
  • 선언 순서대로 각 property 에 해당하는 componentN()
  • copy()

따라서 기계적으로 작성했던 보일러 플레이트 코드의 작성을 줄여준다.

 

 

데이터 클래스는 아래의 요구사항을 충족해야 한다.

  • primary constructor 는 적어도 하나의 파라미터를 가져야 한다.
  • 모든 primary constructor 의 파라미터는 var 또는 val 이 표기되어야 한다.
  • data class 는 abstractopensealedinner 속성을 가질 수 없다.

멤버 상속에 관한 아래의 룰을 따라야 한다.

  • data class 에서 equals()hashCode()toString() 을 따로 선언하거나 subclass 에서 final 구현을 하면 이 함수들의 기본 구현을 사용하지 않는다.
  • supertype 이 open 이고 호환되는 타입을 리턴하는 componentN() 함수들을 가지면 대응되는 함수들이 data class 를 위해 생성되고, supertype 을 override 한다. 만약 supertype 의 함수들이 final 이거나 incompatible signature 문제로 override 가 안되면 에러를 리포트 한다.
  • componentN() 과 copy() 함수를 직접 구현하는 것은 금지 된다.

 


 

 

참고한 글

 

https://techblog.woowahan.com/2675/

 

코틀린에서 하이버네이트를 사용할 수 있을까? | 우아한형제들 기술블로그

{{item.name}} 신규 시스템을 개발하면서 코틀린과 하이버네이트를 함께 사용한 경험을 나누기 위해 작성해봅니다. 안녕하세요! 서비스플랫폼 팀에서 서버 개발을 하는 김지희, 김석홍입니다. 저희

techblog.woowahan.com

 

https://blog.junu.dev/37

 

Spring Boot + Kotlin + JPA 적용하기 Entity 생성시 생각해볼 점들

2020-05-12 우아한 형제들 기술 블로그 - 코틀린에서 하이버네이트를 사용할 수 있을까?에 나온 내용 추가합니다. 4. data class 사용에 대해 본글에서 적은 순환참조 이슈 외에도 다른 이슈가 나와있

blog.junu.dev

 

'Spring/Kotlin'의 다른글

  • 현재글 [Kotlin + Springboot + JPA] Entity 생성에 관하여.

관련글