-
도메인 계층을 Kotlin으로 변경하기프로젝트/자프링 -> 코프링 마이그레이션 2022. 9. 21. 00:01
도메인 계층은 POJO에 JPA Entity라는 특징이 있습니다.
1. Book이라는 Entity를 JavaBook이라는 이름의 Entity로 변경합니다.
Shift + F6을 사용하여 rename 하면 편리합니다.
package com.group.libraryapp.domain.book; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import static javax.persistence.GenerationType.IDENTITY; @Entity public class JavaBook { @Id @GeneratedValue(strategy = IDENTITY) private Long id; @Column(nullable = false) private String name; public JavaBook() { } public JavaBook(String name) { if (name.isBlank()) { throw new IllegalArgumentException("이름은 비어 있을 수 없습니다"); } this.name = name; } public String getName() { return name; } }
2. 동일하게 Kotlin에 패키지 경로를 만들어주고 Book 코틀린 클래스를 만들어줍니다.
package com.group.libraryapp.domain.book import javax.persistence.Entity import javax.persistence.GeneratedValue import javax.persistence.GenerationType import javax.persistence.Id @Entity data class Book( val name : String, @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id : Long? = null, ) { init{ if(name.isBlank()){ throw IllegalArgumentException("이름은 비어 있을 수 없습니다") } } }
이때 @Entity를 사용하면 기본생성자가 필요하기 때문에 build.gradle에 plugin을 하나 추가합니다.
id 'org.jetbrains.kotlin.plugin.jpa' version '1.6.21'
3. JavaBook에 관련된 코드를 모두 Book으로 바꾸어줍니다.
이때 자바에서는 코틀린생성자를 부를 때 default param을 사용할 수 없어서 값을 채워 넣어 줘야 합니다.
이후 테스트 코트들 실행하면 다음과 같은 에러가 발생하게 됩니다.
Caused by: java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses
리플랙션 할 수 없음을 뜻하는 에러입니다.
build.gradle에 dependencies를 추가합니다.
implementation 'org.jetbrains.kotlin:kotlin-reflect:1.6.21'
4. 테스트가 모두 통과하면 끝입니다.
+ 고려해야 할 점들
ArrayList -> MutableList, immutableList
Setter를 private 하게 설정을 할것인가 말 것인가(backing property 또는 custom setter 또는 팀 컨밴션에 따라 setter public)
생성자 안에 프로퍼티 vs 클래스 body 안의 프로퍼티
JPA와 data class(equlas, toStirng, hashcode가 양방향 연관관계 시 순환 참조를 일으킬 수 있기 때문에 적합하지 않음)
출처
https://www.inflearn.com/course/java-to-kotlin-2#reviews
'프로젝트 > 자프링 -> 코프링 마이그레이션' 카테고리의 다른 글
Kotlin + Junit 5 could not Autowire 이슈 (0) 2022.11.28 게시글 프로젝트 리팩토링 (0) 2022.11.11 dto 코틀린으로 변환하기 (0) 2022.09.26 Repository와 Service 계층 Kotlin으로 변경하기 (0) 2022.09.25 자바 프로젝트에서 코틀린 시작하기 (0) 2022.09.18