Kotlin 7

Kotlin + JPA 의 val id 이슈

kotlin을 이용해 아주 잘 쓰고 있었다. 그런데, jpa를 만나기 전까지는 그랬다.Entity를 어떻게 구성 할까 하다 늘 고민이 있었다. Data class로 쓰다가, Class로 쓰다가~ 이것 저것 하다가 id만 불변으로 설정 하자. @Entity@Table(name = "target")class Target( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column val id: Long = 0,) { // 기타 코드}id를 불변으로 처리 하니, 바뀔 일은 없겠지! 하는 순간, 문제가 발생 한다. Jpa 관련 된 ItemReader의 경우에는 id를 정상적으로 잘 가져오지만,  @Bean @StepScop..

kotlin - jackson 관련 이슈 (토비의 스프링 6 강의)

토비님의 스프링 6 강의를 듣다가, 아래와 같은 코드를 입력 했었다. (자바로 안하고, 코틀린으로 작성 했을때의 문제이다)data class Payment( val orderId: Long, val currency: String, val foreignCurrencyAmount: BigDecimal, val exchangeRate: BigDecimal, val convertedAmount: BigDecimal, val validUntil: LocalDateTime,)import com.fasterxml.jackson.annotation.JsonIgnorePropertiesimport java.math.BigDecimal@JsonIgnoreProperties(ignoreUnknown = true)..

Kapt 관련 오류시 참조 (superclass access check failed)

superclass access check failed: class org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler (in unnamed module @0x37be58b7) cannot access class cohttp://m.sun.tools.javac.main.JavaCompiler (in module jdk.compiler) because module jdk.compiler does not export cohttp://m.sun.tools.javac.main to unnamed module @0x37be58b7 위와 같은 오류가 발생하길래 뭔가 했더니, Java9 이후부터 모듈 시스템이 등장 했는데, 이때문에 이런 오류가 발생하는 것 같다. JDK..

kotlin + junit의 생성자 주입시 오류

kotlin의 경우 생성자 주입을 그냥 하게 되면, 오류가 발생하게 되는데, 아래처럼 해결 하는 방법이 있다. 1. @Autowired constuctor를 사용하는 방법 class SimpleServiceTest @Autowired constructor ( val simpleService: SimpleService ) { @Test fun `이렇게 하면 결과가 나온다`() { } } 2. @TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL) 를 활용하는 방법 @TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL) class SimpleServiceTest ( val simple..

kotest 생성자 bean 주입 오류 - Specs must have a public zero-arg constructor

kotest에서 빈을 생성자 주입으로 쓰려고 하면, Specs must have a public zero-arg constructor 오류가 발생 할 수 있다. 이 때에는 kotest-extension-spring 모듈이 필요로 하다. kotest extension spring 라이브러리가 두개가 검색 되곤 하는데, 헷갈리면 안된다. https://kotest.io/docs/extensions/spring.html Spring | Kotest Kotest offers a Spring extension that allows you to test code that uses the Spring framework for dependency injection. kotest.io 실제 docs를 보면, 1.1.3 ..

이펙티브 코틀린 2장 가독성

## 2장 가독성 ### 아이템11 가독성을 목표로 설계 하라 ```kotlin if (person != null && person.isAdult) { view.showPerson(person) view.hideProgressWithSuccess() } else { view.showError() view.hiseProgress() } person?.takeIf { it.isAdult } ?.let { view.showPerson(person) view.hideProgressWithSuccess() } ?: run { view.showError() view.hideProgress() } ``` A/B 코드 중에 A 코드가 명확하고, 이해하기가 더 쉽다. B 코드는 코틀린 스러워 보이지만, 오히려 디버깅을 ..

Mybatis의 nested select, nested result (Spring Boot, H2, Kotlin|Java)

마지막 근무일 즈음에 팀원분이 궁금하다고 요청을 해주셔서, 보다가 사실 생소한 현재 팀에서 Kotlin 환경이다 보니, 이런 저런 이슈들이 좀 있었는데, Mybatis의 nested select 관련 질문으로 이상하게 잘 안된다고 해주셨다. 결과적으로 어렵진 않은 이슈였는데, 궁금해서 Java 버전으로도 동일하게 샘플 코드르 작성 해보았다. 그 이유는 코틀린 언어적인 이슈인지, 순수한 Java환경에서도 이슈가 되는지 궁금 했다. 그래서 두 프로젝트를 생성 해서 테스트 해봤다. 결과적으로 코틀린 환경에서는 data class에 대한 noarg 플러그인이 필요로 했다. 다만, 해당 플러그인을 쓰는게 맞을까? 고민스럽긴 하다. 그리고 이럴때 필요한 개념이 보통 Mybatis에서는 association/coll..

Spring 2022.07.19
반응형