Kotlin13 [Spring with Kotlin] sealed class로 다양하게 요청 받기 예제 코드는 여기에서 확인할 수 있다. 서버 API를 만들다보면 동일한 리소스에 대해 다른 요청 파라미터를 받아야할 때가 있다. 기본적인 파라미터는 동일하지만 리소스의 타입에 따라 다른 파라미터를 추가적으로 받아야할 때 sealed class를 활용하여 하나의 리소스에 대한 다양한 요청 DTO를 관리할 수 있다. 예를 들어 유저를 등록하는 API가 있다고 하자. 기본적으로 서비스에서 가입 시 유저로부터 이름, (로그인 ID로써)이메일, 비밀번호를 받아야한다면 요청 파라미터는 다음과 같은 data class로 나타낼 수 있을 것이다. data class UserSignUpRequest( @field:NotBlank val name: String, @field:Email val email: String, @.. 2022. 1. 28. Arrow Core: Tutorials - Functional Error Handling (작성 중) Functional Error Handling 함수형 에러 핸들링 https://arrow-kt.io/docs/patterns/error_handling/ Λrrow Functional companion to Kotlin's Standard Library arrow-kt.io When dealing with errors in a purely functional way, we try as much as we can to avoid exceptions. 순수한 함수형 방식으로 에러를 처리할 때, 예외들을 피할 수 있게 최대한 노력한다. Exceptions break referential transparency and lead to bugs when callers are unaware that they may.. 2021. 12. 31. 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. 이전 1 2 3 다음