본문 바로가기

공부/Kotlin19

10장 애노테이션과 리플렉션 1. 애노테이션 1.1 애노테이션 적용 애노테이션의 인자 원시 타입의 값 문자열 enum 클래스 참조 @MyAnnotation(MyClass::class)처럼 ::class를 클래스 이름 뒤에 뒤에 넣어야 함 다른 애노테이션 클래스 : @를 넣지 않음 지금까지의 요소들로 이뤄진 배열 @RequestMapping(path = arrayOf("/foo", "/bar"))처럼 arrayOf 함수를 사용 1.2 애노테이션 대상 프로퍼티의 getter에 해당 애노테이션을 붙이고 싶은 경우 사용 시점 대상을 지정할 때 지원하는 목록 property : 프로퍼티 전체 field : 프로퍼티에 필드 get : 프로퍼티 게터 set : 프로퍼티 세터 receiver : 확장 함수나 프로퍼티의 수신 객체 파라미터 para.. 2022. 7. 18.
9장 제네릭스 kotlin in action 책을 통한 공부입니다. 1. 제네릭 타입 파라미터 1. 타입 파라미터 T : 타입파라미터 선언 수신/반환 : 수신객체와 반환타입에 쓰인다. 타입 파라미터 X : 이 변수는 리스트다. 타입 파라미터 사용 : 이 변수는 문자열 리스트다 (명확) → 코틀린에서, 제네릭 타입 인자를 프로그래머가 명시하거나, 컴파일러가 추론할 수 있어야 한다. fun List.slice(indices: IntRange) : List val letters = ('a'...'z').toList() letters.slice(0..2) // 프로그래머가 명시 letters.slice(10..13) // 컴파일러가 타입 인자를 추론. T가 Char 라는 사실을 추론 확장 프로퍼티 선언도 가능하다. val L.. 2022. 7. 2.
[Kotlin] 파라미터와 반환 값으로 람다 사용해보기 1. 고차함수 고차함수 : 다른 함수를 인자로 받거나, 함수를 받환하는 함수. 즉, 코틀린에서는 람다나 함수 참조를 인자로 넘길 수 있거나 람다나 함수 참조를 반환하는 함수이다. 1. 함수 타입 (Int, String) → Unit (파라미터타입 → 반환타입) () → String? null을 반환할 수 있다. (() → Int)? 함수 타입이 null이 될 수 있다. invoke(이름 없이 간편하게 호출될 수 있는 함수)로 호출한다. 2. 인자로 받은 함수 호출 예제1 twoAndThree { a, b -> a + b } // The result is 5 twoAndThree { a, b -> a * b } // The result is 6 예제2 String.filter(predicate: (Char.. 2022. 7. 2.
[Kotlin] 연산자 오버로딩과 기타 관례 사용해보기 1. 산술 연산자 오버로딩 자바 : 원시타입, String 만 가능하다. 코틀린 : 클래스, 컬렉션에도 적용 가능 1-1. 이항 산술 연산 오버로딩 + - * / % 클래스 내부에 operator fun plus 를 추가한다 data class Point(val x: Int, val y: Int) { operator fun plus(other: Point): Point { // 오버로딩 return Point(x + other.x, y + other.y) } } fun main() { val p1 = Point(10, 20) val p2 = Point(30, 40) println(p1 + p2) // Point(40, 60) // 실제로, p1.plus(p2) 로 호출된다. } 식 함수이름 특징 연산자 .. 2022. 6. 20.
[Kotlin] 코틀린 타입 시스템 사용해보기 1. 널 가능성 NullPointerException 오류를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성 실행시점 → 컴파일시점 감지 1-1. 널이 될 수 있는 타입 널을 인자로 받을 수 있도록 변경 : 타입이름 뒤 ?를 명시한다. 따라서, 모든 타입은 기본적으로 널이 될 수 없는 타입이다. 널이될 수 있는 타입은 null값을 다루어야 한다! fun strLenSafe(s: String?): Int = if (s != null) s.length else 0 fun strLenSafe(s: String?): Int = if (s != null) s.length else 0 1-2. 안전한 호출 연산자 ?. foo?.bar() foo가 null이 아닐 때, 정상 실행 foo.bar() foo가 nul.. 2022. 6. 20.
4장. 클래스, 객체, 인터페이스 클래스 계층 정의 코틀린 인터페이스 자바와 다른점 디폴트 구현 메서드가 가능하다 추상 프로퍼티 선언을 넣을 수 있다 구체적 타입 지정 문법이 다르다 자바 : Clickable.super.showOff() 코틀린 : super.showOff() interface Clickable { fun click() fun showOff() = println("i'm clickable") } interface Focusable { fun showOff() = println("i'm focusable") } class Button : Clickable, Focusable{ override fun click() = println("i was clicked") override fun showOff() { // overrid.. 2022. 6. 7.