본문 바로가기

kotlin6

[jackson] 데이터가 null일때 empty list로 바꾸는 옵션 data class Test( val field: List? ) 위와 같은 형식으로 deserialize시에 default 값으로 empty list를 주고 싶다면 @JsonSetter(nulls = Nulls.AS_EMPTY) 를 붙이면 된당 그러면 해당 필드를 not nullable하게 사용 가능하다 data class Test( @JsonSetter(nulls = Nulls.AS_EMPTY) val field: List ) 2022. 9. 19.
11. DSL 만들기 11. DSL 만들기 invoke 관계를 사용하면 DSL 코드 안에서 람다와 프로퍼티 대입을 더 유연하게 조합할 수 있다. 11.1 API에서 DSL로 궁극적인 목표는 코드의 가독성과 유지 보수성을 좋게 유지하는 것이다. 상호작용을 이해하기 쉽고 명확하게 표현할 수 있게 만들어야 프로젝트를 계속 유지 보수할 수 있다. 깔끔한 api의 특징 이름과 개념을 잘 선택하면 클라이언트가 해당 코드에 대해 어떤 일이 벌어질지 명확하게 이해할 수 있다. 코드가 간결해야한다. 불필요한 구문이나 번잡한 준비 코드가 가능한 한 적어야 한다. 코틀린 DSL은 간결한 구문을 제공하는 기능과 그런 구문을 확장해서 여러 메소드 호출을 조함으로써 구조를 만들어내는 기능에 의존한다. 코틀린 언어의 다른 특성과 마찬가지로 코틀린 DS.. 2022. 4. 28.
10. 애노테이션과 리플렉션 10. 애노테이션과 리플렉션 애노테이션을 사용하면 라이브러리가 요구하는 의미를 클래스에게 부여할 수 있다. 리플렉션을 사용하면 런타임에 컴파일러 내부 구조를 분석할 수 있다. 10.1 애노테이션 선언과 적용 메타 데이터를 선언에 추가하면 애노테이션을 처리하는 도구가 컴파일 시점이나 실행 시점에 적절한 처리를 해준다. 10.1.1 애노테이션 적용 함수나 클래스 등 여러 다른 코드 구성 요소에 애노테이션을 붙일 수 있다. 애노테이션의 인자로는 원시 타입의의 값, 문자열 , enum, 클래스 참조, 다른 애노테이션 클래스, 앞의 요소들로 이뤄진 배열이 들어갈 수 있다. 클래스 애노테이션 인자로 지정할 때는 @MyAnnotation(MyClass::class) 처럼 ::class를 클래스 이름 뒤에 넣어야한다... 2022. 3. 26.
9. 제네릭스 9.1 제네릭 타입 파라미터 제네릭스를 사용하면 타입 파라미터를 받는 타입을 정의할 수 있다. 컴파일러는 타입 인자도 추론할 수 있다. val authors = listOf("Dmitry", "Svetlana") // 안붙이고 타입 추론을 했다 반면에 빈 리스트를 만들어야 한다면 타입 인자를 추론할 근거가 없기 때문에 직접 타입 인자를 명시해야한다. val readers: MutableList = mutableListOf() val readers = mutableListOf() 9.1.1 제네릭 함수와 프로퍼티 제네릭 함수를 호출할 때는 반드시 구체적 타입으로 타입 인자를 넘겨야한다. 실제로는 대부분 컴파일러가 타입 인자를 추론할 수 있으므로 그럴 필요가 없다. public fun List.slice(i.. 2022. 2. 28.