전체 글251 [Kotlin] 10.1 annotation 선언과 적용 10.1.1 annotation 적용자바와 코틀린에서 @Deprecated annotation의 의미는 똑같다. 하지만 코틀린에서는 replaceWith 파라미터를 통해 옛 버전을 대신할 수 있는 패턴을 제시할 수 있고, API 사용자는 그 패턴을 보고 지원이 종료 될 API 기능을 더 쉽게 새 버전으로 포팅할 수 있다. 다음 예제는 @Deprecated annotation에 어떻게 인자를 지정하는지에 대한 코드다.// 사용 금지를 설명하는 메시지와 대체할 패턴을 지정@Deprecated("Use removeAt(index) instead.", ReplaceWith("removet(index)"))fun remove(index: Int) { ... }annotation에 인자를 넘길 때는 일반 함수와 마.. 2025. 4. 3. [Kotlin] 스타 프로젝션(*)과 Any의 차이 스타 프로젝션(List) 예제fun printList(list: MutableList) { // 리스트의 요소를 안전하게 읽을 수 있다. 하지만 쓰기는 불가능하다. (반환 타입은 Any?로 추론) for (item in list) { println(item) }}fun main() { val stringList: MutableList = mutableListOf("A", "B", "C") printList(stringList) val intList: MutableList = mutableListOf(1, 2, 3) printList(intList)}MutableList는 "모든 타입의 리스트"를 받겠다는 의미지만, 구체적인 타입 정보가 없으므로 읽.. 2025. 4. 3. [Kotlin] 코틀린 선언 지점 변성과 자바 와일드카드 비교 변성: 제네릭을 다룰 때 “타입 안전성”을 확보하기 위해 하위 타입 관계를 어떻게 적용할지를 결정하는 개념예를 들어, Integer는 Number의 하위 타입인데, 이를 List와 List 사이에 어떻게 적용할지 결정하는 것입니다.변성 변경자: 코틀린에서 클래스나 인터페이스 선언 시, 타입 파라미터에 out(공변성) 또는 in (반공변성) 키워드로 변성 명시공변성(out):interface Producer { fun produce(): T}반공변성(in):interface Consumer { fun consume(item: T)} 선언 지점 변성을 사용하면 변성 변경자를 단 한 번만 표시하고 클래스를 쓰는 쪽에서는 변성에 대해 신경을 쓸 필요가 없으므로 코드가 더 간결해진다. 자바에서 사용.. 2025. 4. 3. [Kotlin in Action] 9.3 변성: 제네릭과 하위 타입 변성(variance) 개념은 List와 List와 같이 기저 타입이 같고 타입 인자가 다른 여러 타입이 서로 어떤 관계가 있는지 설명하는 개념이다. 일반적으로 이런 관계가 왜 중요한지 먼저 설명한 다음에 코틀린에서 변성을 어떻게 표시하는지 살펴본다. 직접 제네릭 클래스나 함수를 정의하는 경우 변성을 꼭 이해해야한다. 변성을 잘 활용하면 사용에 불편하지 않으면서 타입 안정성을 보장하는 API를 만들 수 있다. 9.3.1 변성이 있는 이유: 인자를 함수에 넘기기List 타입의 파라미터를 받는 함수에 List을 넘기면 안전할까? String 클래스는 Any를 확장하므로 Any 타입 값을 파라미터로 받는 함수에 String 값을 넘겨도 절대로 안전하다. 하지만 Any와 String이 List 인터페이스의 타입.. 2025. 4. 2. [Kotlin in Action] 9.2 실행 시 제네릭스의 동작: 소거된 타입 파라미터와 실체화된 타입 파라미터 JVM의 제네릭스는 보통 타입 소거(type erasure)를 사용해 구현된다. 이는 실행 시점에 제네릭 클래스의 인스턴스에 타입 인자 정보가 들어있지 않다는 뜻이다. 이번 절에서는 코틀린 타입 소거가 실용적인 면에서 어떤 영향을 끼치는지 살펴보고 함수를 inline으로 선언함으로써 이런 제약을 어떻게 우회할 수 있는지 살펴본다. 함수를 inline으로 만들면 타입 인자가 지워지지 않게 할 수 있다(코틀린에서는 이를 실체화reify라고 부른다). 실체화한 타입 파라미터에 대해 자세히 다루고 실체화한 타입 파라미터가 유용한 이유를 예제를 통해 알아보자. 9.2.1 실행 시점의 제네릭: 타입 검사와 캐스트자바와 마찬가지로 코틀린 제네릭 타입 인자 정보는 런타임에 지워진다. 이는 제네릭 클래스 인스턴스가 그 .. 2025. 4. 2. 이전 1 2 3 4 ··· 51 다음 반응형