인프런 최태현님의 실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기를 보고 정리하였습니다.
코틀린에서 JPA를 사용할 때 고려할 점을 하나씩 살펴보자!
1. setter를 어떻게 처리할까?
setter를 사용하는 것보다 좋은 이름의 함수를 사용하는 것이 훨씬 clean하다.
- 하지만 코틀린에서 생성자 필드를 생성하면 setter는 public이다.
- 따라서 setter를 사용할 수도 있다.
- public getter는 필요하다.
방법1. setter를 private로 닫는다.
backing property를 사용한다.
방법2. custom setter를 이용한다.
class User(
name: String
) {
val name = name
private set // set을 잠군다
}
하지만, 모두 프로퍼티가 많아지면 번거롭다.
방법3. setter를 열어두고 사용하지 않는 방법 (팀 컨밴션 선호)
- 팀에서 setter를 사용하면 안된다는 사실을 모든 개발자가 체득
- Trade-Off의 영역, 팀 컨밴션을 잘 맞추면 되지 않을까
2. 생성자 안의 프로퍼티 / 클래스 body 안의 프로퍼티
어떻게 넣어야 할까? 아래 코드는 잘 동작한다.
@Entity
class User(
var name: String,
val age: Int?,
) {
@OneToMany(mappedBy = "user", cascade = [CascadeType.ALL], orphanRemoval = true)
val userLoanHistories: MutableList<UserLoanHistory> = mutableListOf(),
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null
}
- 모든 프로퍼티를 생성자에 넣거나
- 프로퍼티를 생성자 혹은 클래스 body 안에 구분해서 넣을 때 명확한 기준이 있거나
3. Entity 클래스는 data class를 피하자
다음은 JPA Entity와 어울리지 않는 메소드이다.
- equals
- hashCode
- toString
만약 연관관계가 있는 equals를 호출한다면, 계속 서로를 부르며 에러가 발생할 수 있다.
'공부 > Kotlin' 카테고리의 다른 글
JUnit5에서 Kotest로 마이그레이션 하며 겪은 트러블슈팅들 (1) | 2022.10.20 |
---|---|
코틀린 기본내용을 모두 정리해보자 (2) | 2022.08.27 |
왜 Kotest를 사용해야 할까? (2) | 2022.07.26 |
Kotest의 테스트스타일 10가지 (0) | 2022.07.26 |
11장 DSL 만들기 (0) | 2022.07.18 |
댓글