본문 바로가기

kotlin9

[Kotlin in Action] 7.5: by 키워드를 통해 위임 프로퍼티 우아하게 구현하기 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 코틀린이 지원하는 위임 프로퍼티는 말 그대로 프로퍼티가 하는 일인 값을 저장하고(setter) 가져오는(getter) 역할을 다른 누군가(객체)에게 위임하는 것을 말한다. 이렇게 프로퍼티가 하는 일을 다른 객체에 위임함으로써 얻을 수 있는 이익이 무엇일까? 우선 이 질문에 공감하기 위해 한 가지 예시를 들어보겠다. 위임프로퍼티 예시: 특정 프로퍼티의 변경을 감지해 이벤트를 발행하고 핸들러에서 이를 처리해야 하는 요구사항이 있다고 가정해 보자 예를 들어, 어떤 객체를 UI에 표시해야 하는 경우 객체가 바뀌면 자동으로 UI도 바뀌어야 한다. 이를 코틀린이 지원하는 키워드 없이 그냥 구현하면 아래와 같이 구현할 수 .. 2023. 5. 29.
kotlin data class 와 jackson 역직렬화 & spring과의 통합 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 1. jackson 역직렬화 기본 동작과 kotlin data class 1-1. jackson 역직렬화 기본 동작 1. 기본생성자가 있을 때 기본생성자를 호출해 객체를 생성 후 setter를 통해 필드를 초기화한다. 2. 기본생성자가 없을 때 역직렬화 대상 객체의 필드 이름을 파라미터로 받는 생성자가 있는지 찾아본다. 필드 이름을 파라미터로 받는 생성자가 있다면, 해당 생성자를 통해 객체를 생성 후 아직 초기화되지 않는 필드는 setter를 통해 초기화한다. 이 경우에는 @JsonCreator와 @JsonProperty를 통해 역직렬화를 위한 생성자와 필드를 명시해줘야 한다. 3. 기본생성자도 없고 필드 이름.. 2023. 3. 26.
[Kotlin in Action] 6장: 코틀린 타입 시스템 > 6.1 널과 관련한 이야기 6.1 널 가능성 NPE는 Null 개념이 있는 모든 언어에서 하기 쉬운 실수이며, 했을 때 매우 치명적임 코틀린을 비롯한 최신 언어에서 null에 대한 접근 방법은 가능한 이 문제를 런타임에서 컴파일 시점으로 옮기는 것 널이 될 수 있는지 여부를 타입 시스템에 포함시켜, 컴파일러가 여러 가지 오류를 컴파일 시 미리 감지할 수 있도록 하는 방향 6.1의 포인트 코틀린에서 널이 될 수 있는 타입과 없는 타입의 구분 널이 될 수 있는 타입에 대한 컴파일 시점의 처리들 널 처리 측면에서 자바 코드와 코틀린 코드의 호완성 6.1.1 널이 될 수 있는 타입 코틀린은 자바와 달리 널이 될 수 있는 것과 없는 것을 타입 수준에서 구분한다. {특정 타입}에? 를 붙이면 널이 될 수 있는 타입이라는 의미 타입 수준에서 .. 2023. 3. 18.
[Kotlin in Action] 5장: 람다로 프로그래밍 5.1 람다 식과 멤버 참조 5.1.2 람다와 컬랙션 람다가 없을 때 data class Person(val name: String, val age: Int) fun findTheOldest(peoples: List) { var maxAge = 0 var theOldest: Person? = null for(person in peoples) { if(person.age > maxAge) { maxAge = person.age theOldest = person } } println(theOldest) } fun main(args: Array) { val peoples = listOf(Person("soungho", 14), Person("sejin", 50)) findTheOldest(peoples) } .. 2023. 3. 5.