무작정 코틀린에 대해서 접하였고 기본적인 문법을 공부하고, 간단한 게시판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 는 abstract, open, sealed, inner 속성을 가질 수 없다.
멤버 상속에 관한 아래의 룰을 따라야 한다.
- 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
Spring Boot + Kotlin + JPA 적용하기 Entity 생성시 생각해볼 점들
2020-05-12 우아한 형제들 기술 블로그 - 코틀린에서 하이버네이트를 사용할 수 있을까?에 나온 내용 추가합니다. 4. data class 사용에 대해 본글에서 적은 순환참조 이슈 외에도 다른 이슈가 나와있
blog.junu.dev
'Spring > Kotlin' 카테고리의 다른 글
[Kotlin+Springboot+JPA] Exception Handling by Kotlin (0) | 2021.08.31 |
---|---|
[SpringBoot + Kotlin + JPA] 간단한 게시글 CRUD REST Api 구현. (0) | 2021.08.08 |
[Springboot + Kotlin] Slack 채널 메세지 전송 연동. (0) | 2021.08.06 |
[Kotlin + Springboot + Kotest] Kotest 알아보자. (0) | 2021.08.01 |
[Kotlin + SpringBoot + JPA] Swagger 설정 및 동작 (0) | 2021.07.18 |