[Error] Kotlin JSON parse error
·
Trouble Shooting(Error)
JSON parse error 발생! 일단 내가 경험했던 에러 메시지는 다음과 같다. JSON으로된 문자열을 Request로 변환해 주어야 하는데 실패 Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.group.libraryapp.dto.book.request.BookRequest` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator); nested exception ..
[TIL/Kotlin] Kotlin과 JPA를 사용할 때 이야기거리 3가지
·
TIL/Kotlin
보호되어 있는 글입니다.
[TIL/Kotlin] 코틀린 고급문법_sealed 클래스, 위임된 프로퍼티, 클래스 위임
·
TIL/Kotlin
1. sealed 클래스 sealed 클래스는 자신의 중첩 클래스에만 상속을 허용하는 클래스이다. // Outer 클래스는 자신의 중첩 또는 내부 클래스에서만 상속이 가능하다. Outer 클래스 자체로는 인스턴스 생성 불가능 sealed class Outer { class One: Outer() class Two: Outer() class Three: Outer() } // Outer 클래스는 자신의 중첩 클래스에서만 상속이 가능하기 때문에 주석을 해제하면 오류 발생 // class Four: Outer() fun main() { val instance:Outer = Outer.Three() val test: Outer /* sealed 클래스는 서브클래스가 sealed 클래스 안에 모두 존재하므로, 모..
[TIL/Kotlin] 코틀린 고급문법_열거 클래스(Enum Class)와 열거 클래스에 프로퍼티와 멤버 함수 선언 및 활용하기
·
TIL/Kotlin
1. 열거 클래스(Enum Class) 클래스 선언문 앞에 enum 키워드를 붙이면 열거 클래스로 선언이 가능하다. 열거 클래스에 들어가는 식별자를 열거 상수라고 한다. 열거 클래스에 포함시킬 식별자를 쉼표를 이용해 나열하며, 식별자는 모두 대문자로 하는 것이 좋다. 열거 클래스.열거 상수 형태로 초기화 가능하다. enum class Mode { SELECTION, PEN, SHAPE, ERASER // 열거 상수 } fun main() { // 현재 선택된 모드 val mode: Mode = Mode.PEN when(mode) { Mode.SELECTION -> println("선택 모드") Mode.PEN -> println("펜 모드") Mode.SHAPE -> println("도형 모드") Mod..
[TIL/Kotlin] 코틀린 고급문법_배열(Array)과 배열을 가변 인수로 활용하기
·
TIL/Kotlin
1. 배열(Array) 배열은 타입이 같은 변수를 여러 개 만들 때 사용한다. Array 클래스에는 아래와 같은 프로퍼티와 연산자 멤버 함수가 있다. > size 프로퍼티는 배열의 원소 개수를 나타낸다. > get/set 연산자 멤버 함수는 배열을 []연산자로 접근할 수 있게 해준다. > iterator 연산자 멤버 함수는 배열을 for 문에 쓸 수 있게 해준다. 배열은 arrayOf 함수를 통해서 만들 수 있다. arrayOf는 가변 인수를 받을 수 있도록 되어 있으며, 제네릭이 적용되어 있다. fun main() { val integers: Array = arrayOf(10, 20, 30, 40) println(integers.size) println(integers[1]) for(i in integ..
[TIL/Kotlin] 코틀린 고급문법_반복자(Iterator)와 반복문 for문
·
TIL/Kotlin
1. 반복자(Iterator) 반복자란? 특정 구간 속에 있는 원소를 하나씩 반복적으로 꺼내기 위한 인터페이스를 뜻한다. 코틀린에는 Iterator라는 인터페이스가 기본적으로 선언되어 있으며, 다음과 같이 생겼다. interface Iterator { operator fun next(): T operator fun hasNext(): Boolean } 아래 예제를 통해 next와 hasNext 멤버 함수를 어떻게 사용하는지 살펴보자 fun main() { val range: IntRange = 1..3 // IntRange 클래스에는 operator fun iterator(): IntIterator 연산자 멤버 함수 선언되어있음 val iter: Iterator = range.iterator() // i..
[TIL/Kotlin] 코틀린 고급문법_클래스와 인터페이스에서 제네릭 사용하기, 제네릭이 적용된 인터페이스/클래스 상속·구현하기, 특정 타입을 상속·구현하는 타입만 인수로 받기
·
TIL/Kotlin
1. 클래스와 인터페이스에서 제네릭 사용하기 클래스와 인터페이스에도 제네릭을 적용할 수 있다. 클래스나 인터페이스에서 타입을 인수로 받으려면 선언시 이름 옆에 를 붙인다. class Pair(val first: A, val second: B) { override fun toString() = "$first\n$second" } 제네릭이 적용된 클래스와 인터페이스에는 이름 옆에 를 붙여야 한다. 예제에서는 Int와 Double을 타입 인수로 지정했다. 생성자를 호출할 때도 생성자 이름 옆에 를 붙인다. 아래 예제에서는 생성자의 인수로부터 타입을 추론할 수 있어 생략이 가능하다. fun main() { val pair: Pair pair = Pair(15, 9.12) println(pair.toString(..
[TIL/Kotlin] 코틀린 고급문법_리시버가 붙은 함수리터럴, 제네릭(Generic), 여러 타입을 인수로 받기, 구체화된 타입 매개변수
·
TIL/Kotlin
1. 리시버가 붙은 함수 리터럴 함수 리터럴에 리시버를 적용하여 확장 함수처럼 만들 수 있다. 리시버가 붙은 함수 리터럴에는 리시버를 나타내는 this 키워드를 사용할 수 있다. 호출은 리시버.변수(인수) 형태로 호출한다. 일반 함수 타입으로 호출할 때는 리시버를 첫 번째 인수로 전달하면 된다. Int.(Int, Int) -> Int 타입은 (Int, Int, Int) -> Int 타입에 대입 fun main() { // Int 리시버를 [left, right] 범위 이내로 가공하여 반환하는 확장 함수 // Int.(left: Int, right: Int) 리시버 타입이 Int, 매개변수의 타입이 (Int, Int)이며, 반환타입이 Int인 함수 val makeSure: Int.(left: Int, ri..
[TIL/Kotlin] 코틀린 고급문법_함수 참조, 고차 함수, 클로저(Closure)
·
TIL/Kotlin
1. 함수 참조 함수 타입의 변수는 이미 선언되어 있는 함수나 객체의 멤버 함수를 가리킬 수도 있다. 함수 이름 앞에 :: 를 붙이면, 표현식의 값은 그 함수의 참조값이 되며, 타입은 그 함수의 시그니처에 맞는 함수 타입이 된다.(코틀린 1.1 버전까지는 ::plus가 아닌 this::plus 형태로 적어야 한다) 객체의 멤버 함수를 함수 타입의 표현식으로 바꾸려면 '참조 변수::멤버 함수'의 꼴로 적는다. fun plus(a: Int, b: Int) = println("plus 호출됨 ${a + b}") object Object { fun minus(a: Int, b: Int) = println("Object의 minus 호출됨 ${a - b}") } class Class { fun average(a:..