10-애노테이션과 리플렉션

애노테이션 선언과 적용 애노테이션 적용 코틀린에서 @Deprecated 애노테이션은 대신할 수 있는 패턴을 제시할 수 있다. @Deprecated("Use new(index) instead.", ReplaceWith("new(index)")) fun deprecated(index: Int) { println("deprecated: index") } fun new(index: Int) { println("new: $index") } 애노테이션의 인자로는 원시 타입의 값, 문자열, enum, 클래스 참조, 다른 애노테이션 클래스, 그리고 지금까지 말한 요소들로 이뤄진 배열이 들어갈 수 있다. 클래스 애노테이션 인자로 지정할 때는 @MyAnnotation(MyClass::class) 처럼 ::class를 클래스 이름 뒤에 넣어야 한다. 다른 애노테이션을 인자로 지정할 때는 인자로 들어가는 애노테이션의 이름 앞에 @를 넣지 말아야된다....

2025-01-02 · 4 min · 743 words

2-코틀린 기초

기본 요소: 함수와 변수 Hello, World! 함수를 선언할 때 fun 키워드를 사용한다. 파라미터 이름 뒤에 그 파라미터의 타입을 쓴다. 함수를 최상위 수준에서 정의할 수 있다. 꼭 클래스 안에 함수를 넣어야 할 필요가 없다. 배열도 일반적인 클래스와 마찬가지다. 코틀린에는 자바와 달리배열 처리를 위한 문법이 따로 존재하지 않는다. System.out.println 대신에 println이라고 슨다. 코틀린 표준 라이브러리는 여러 가지 표준 자바 라이브러리 함수를 간결하게 사용할 수 있게 감싼 wrapper를 제공한다. 줄 끝에 세미콜론을 붙이지 않아도 좋다....

2024-09-15 · 5 min · 1029 words

1-코틀린이란 무엇이며, 왜 필요한가

코틀린의 주요 특성 대상 플랫폼: 서버, 안드로이드 등 자바가 실행되는 모든 곳 코틀린을 활용할 수 있는 가장 일반적인 영역 서버상의 코드 안드로이드 디바이스에서 실행되는 모바일 애플리케이션 코틀린은 개발 과정에서 수행해야 하는 모든 과업에 있어 폭넓게 생산성을 향상시켜준다. 정적 타입 지정 언어 정적 타입: 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드와 메서드를 사용할 떄마다 컴파일러가 타입을 검증해준다. 성능: 실행 시점에 어떤 메서드를 호출할지 알아내는 과정이 필요 없으므로 메서드 호출이 더 빠르다....

2024-09-15 · 4 min · 671 words

9-제네릭스

실체화한 타입 파라미터(reified type parameter)를 사용하면 인라인 함수 호출에서 타입 인자로 쓰인 구체적인 타입을 실행 시점에 알 수 있다. 일반 클래스나 함수의 경우 타입 인자 정보가 실행 시점에 사라지기 때문에 구체적인 타입을 알 수 없다. 선언 지점 변성(declaration-site variance)을 사용하면 기저 타입은 같지만 타입 인자가 다른 두 제네릭 타입이 있을 때, 타입 인자의 상위/하위 타입 관계에 따라 두 제네릭 타입의 상위/하위 타입 관계가 어떻게 되는지 지정할 수 있다. 제네릭 타입 파라미터 제네릭 타입의 인스턴스를 만들려면 타입 파라미터를 구체적인 타입 인자로 치환해야 한다....

2024-09-15 · 6 min · 1251 words

8-고차 함수 파라미터와 반환 값으로 람다 사용

고차 함수 고차 함수: 다른 함수를 인자로 받거나 함수를 반환하는 함수 함수 타입 코틀린의 타입 추론으로 인해 변수 타입을 지정하지 않아도 람다를 변수에 대입할 수 있다. 반환 타입이 널이 될 수 있는 타입 var canReturnNull: (Int, Int) -> Int? = { x, y -> null } 함수 타입 전체가 널일 될 수 있는 타입 var funOrNull: ((Int, Int) -> Int)? = null 함수 타입에서 파라미터 이름을 지정할 수도 있다. 타입 검사 시 무시되고, 파라미터 이름이 꼭 함수 타입 선언의 파라미터 일므과 일치하지 않지만, 코드 가독성이 좋아지고 IDE 코드 자동 완성을 사용할 수 있다....

2024-09-15 · 5 min · 972 words

7-연산자 오버로딩과 기타 관례

관례(convention): 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법 예: 어떤 클래스 안에 plus라는 이름의 메소드를 정의하면 그 클래스의 인스턴스에 대해 + 연산자를 사용할 수 있다. 이유: 기존 자바 클래스를 코틀린 언어에 적용하기 위함 산술 연산자 오버로딩 이항 산술 연산 오버로딩 연산자를 오버로딩하는 함수 앞에는 꼭 operator 키워드가 있어야 한다. data class Point(val x: Int, val y: Int) { operator fun plus(other: Point): Point { return Point(x + other....

2024-09-15 · 8 min · 1660 words

6-코틀린 타입 시스템

널 가능성 널 가능성(nullability): NPE를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성 코틀린을 비롯한 최신 언어에서 null에 대한 접근 방법은 가능한 한 이 문제를 실행 시점에서 컴파일 시점으로 옮기는 것이다. 널이 될 수 있는 타입[] 모든 타입은 기본적으로 널이 될 수 없는 타입이다. 널을 받을 수 있게 하려면 타입 이름 뒤에 물음표(?)를 명시해야 한다. 널이 될 수 있는 타입의 변수가 있다면 그에 대해 수행할 수 있는 연산이 제한된다. 메소드를 직접 호출할 수 없다....

2024-09-15 · 10 min · 2024 words

5-람다로 프로그래밍

람다 식과 멤버 참조 람다 소개: 코드 블록을 함수 인자로 넘기기 ‘이벤트가 발생하면 이 핸들러를 실행하자’나 ‘데이터 구조의 모든 원소에 이 연산을 적용하자’와 같은 생각을 코드로 표현하기 위해서 예전에는 무명 내부 클래스를 사용했다. 하지만 이는 코드가 너무 번잡스러워졌고, 자바 8부터 람다를 사용해 간결하게 작성할 수 있었다. 자바 컬렉션에 대해 수행하는 대부분 작업은 람다나 멤버 참조를 인자로 받는 함수를 통해 더 짧고 이해하기 쉽게 만들 수 있다. 람다 식의 문법 람다 식을 변수에 저장할 수 있다....

2024-09-15 · 6 min · 1241 words

4-클래스, 객체, 인터페이스

클래스 계층 정의 코틀린 인터페이스 코틀린 인터페이스는 자바 8 인터페이스와 비슷하다. 상위 클래스나 상위 인터페이스에 있는 프로퍼티나 메소드를 오버라이드할 때는 override 변경자를 붙여줘야 된다. 실수로 상위 클래스의 메소드를 오버라이드하는 경우를 방지해준다. 한 클래스에서 두 인터페이스를 함께 구현했을 때, 같은 디폴트 메소드가 있다면 컴파일 오류가 발생한다. 이 경우는 하위 클래스에 직접 구현하게 강제한다. 상위 타입의 메소드 호출하는 방식은 아래를 참고한다. class Button : Clickable, Focusable { override fun click() { println("I was Clicked") } override fun showOff() { super<Clickable>....

2024-09-15 · 8 min · 1668 words

3-함수 정의와 호출

코틀린에서 컬렉션 만들기 코틀린은 자신만의 컬렉션 기능을 제공하지 않는다. 표준 자바 컬렉션을 활용하면 자바 코드와 상호작용하기가 훨씬 쉽다. 코틀린에서는 자바보다 더 많은 기능을 쓸 수 있다. 함수를 호출하기 쉽게 만들기 이름 붙인 인자 코틀린으로 작성한 함수를 호출할 때는 함수에 전달하는 인자 중 일부의 이름을 명시할 수 있다. 호출 시 인자 중 어느 하나라도 이름을 명시하고 나면 혼동을 막기 위해 그 뒤에 오는 모든 인자는 이름을 꼭 명시해야 한다. 자바로 작성한 코드를 호출할 때는 이름 붙인 인자를 사용할 수 없다....

2024-09-15 · 5 min · 1012 words

11-DSL 만들기

API에서 DSL로 궁극적인 목표: 코드의 가독성과 유지 보수성을 가장 좋게 유지하는 것 깔끔한 API의 의미 코드를 읽는 독자들이 어떤 일이 벌어질지 명확하게 이해할 수 있어야 한다. 이름과 개념을 잘 선택하면 이런 목적을 달성할 수 있다. 어떤 언어를 상요하건 일므을 잘 붙이고 적절한 개념을 사용하는 것은 매우 중요하다. 코드가 간결해야 한다. 불필요한 구문이나 번잡한 준비 코드가 가능한 한 적어야 한다. 깔끔한 API는 언어에 내장된 기능과 거의 구분할 수 없다. 코틀린 DSL도 온전히 컴파일 시접에 타입이 정해진다....

2024-09-15 · 3 min · 492 words