본문 바로가기

Kotlin11

observable, vetoable를 통한 프로퍼티 변경 감지 Kotlin은 Delegates를 통해 프로퍼티의 변경을 감지할 수 있는 매우 편리한 기능을 제공한다. observable Delegates.observable은 단순하게 프로퍼티가 변경됨을 감지하는 역할을 한다. import kotlin.properties.Delegates fun main() { var watchedNumber by Delegates.observable(0) { property, oldValue, newValue -> println("`${property.name}` changed from `$oldValue` to `$newValue`") } watchedNumber = 1 watchedNumber = 2 watchedNumber = 3 } 위 코드를 실행 시키면 콘솔에 아래와 같이.. 2021. 11. 6.
by lazy를 통해 지연 초기화 적용하기 개발을 하다보면 가끔 지연 초기화를 적용해야할 때가 있을 수 있다. Kotlin을 사용하면 이를 쉽게 처리를 할 수 있다. 아래 코드를 보자. object Answer { val value = 42 } // 수행이 오래 걸리는 기능 fun longJob() { println("Job just started") Thread.sleep(2_000) println("Job has done") } fun main() { longJob() println(Answer.value) } 여기서 Answer에 value 프로퍼티는 사용되기 전에도 초기화가 되어있다. 이 값을 정말 사용되는 때(위 코드에서는 14번째 라인)까지 초기화를 지연시키고 싶다고 했을 때 by lazy 를 통해 쉽게 처리할 수 있다. object .. 2021. 11. 6.
by 키워드를 사용한 Delegation 다음과 같이 Worker와 Student에 대한 interface가 있다고 할 때, interface Worker { fun work() } interface Student { fun study() } 이 두 interface를 상속받는 클래스를 구현할 때는 다음과 같이 직접 상속받아 구현하는 방식을 주로 사용할 것이다. class Developer : Worker, Student { override fun work() { println("Work hard!") } override fun study() { println("Study hard!") } } Kotlin 에서는 by 키워드를 사용하면 interface를 상속하되 직접 구현하지 않고, 클래스의 프로퍼티에 해당 interface에 대한 역할을 위.. 2021. 11. 6.
Kotlin Gradle Multi Module 적용하기 Java나 Kotlin을 사용할 때 Gradle을 사용하면 모듈형 아키텍처를 적용하는 것이 그리 어렵지 않다. (하지만 자세하게 설정하려고하면 Gradle을 잘 모르고서는 어렵다 👀 ) 이번 포스팅에서는 아래와 같이 2개의 모듈로 구성된 단순한 프로젝트를 만들며 Kotlin을 사용하면서 Gradle Multi Module을 적용하는 방법에 대해 알아보도록 하자 예제는 여기에서 확인할 수 있다. root 프로젝트 프로젝트 생성 먼저 모듈의 root가 되는 Gradle 프로젝트를 생성하자. 아래와 같이 Kotlin 설정을 한 뒤 프로젝트 GroupId, ArtifactId 등을 설정한 후 프로젝트를 생성한다. 불필요한 파일 삭제 root project에 소스코드는 필요하지 않기 때문에 없애도록 한다. 모듈 .. 2021. 11. 4.
Spring JPA Querydsl 세팅 (with Kotlin) Spring Data JPA를 사용한 Spring Boot 프로젝트 기반으로 코드를 작성할 때 Command 작업은 큰 문제는 없지만 집계와 같은 Query 성 작업은 JPA 로는 어느정도 한계가 있다. JPQL을 사용할 순 있겠지만 String base로 코드가 작성되기 때문에 작업을 하면서 실수가 날 여지가 있고 직접 실행하지 않는 이상 이 실수를 알기 힘든 경우가 있다. Querydsl 를 사용하면 이러한 JPQL의 단점을 보완할 수 있다. Querydsl 에서 생성해준 컴파일 된 코드 기반으로 쿼리를 작성하기 때문에 일단 쿼리 작성 자체가 매우 쉬워지고 컴파일 시점에서 오류 또한 찾을 수 있다. 이번 포스팅은 Kotlin 기반의 Spring Boot 프로젝트에 JPA 기반 Querydsl 을 세팅.. 2021. 6. 7.