코틀린에서 제네릭을 사용하는 방법은?
_____A1: 제네릭은 클래스나 함수가 사용할 데이터 타입을 일반화하여, 다양한 타입에 대해 타입 안정성과 재사용성을 제공하는 기능입니다. 컴파일 시 타입 검사를 할 수 있어 타입 안전성을 높이고, 코드 중복을 줄여줍니다.
Q2: 코틀린에서 제네릭 클래스를 선언하는 기본 문법은 어떻게 되나요?
A2: 클래스 이름 뒤에 `
예시:
```kotlin
class Box
fun get(): T = value
}
```
Q3: 제네릭 함수는 어떻게 선언하나요?
A3: 함수 이름 앞에 `
예시:
```kotlin
fun
return listOf(item)
}
```
Q4: 여러 개의 타입 파라미터는 어떻게 선언하나요?
A4: 쉼표로 구분하여 여러 타입 파라미터를 선언할 수 있습니다.
예시:
```kotlin
class Pair(val first: A, val second: B)
```
Q5: 타입 파라미터에 제한(upper bound)을 두려면 어떻게 하나요?
A5: `:`를 이용해 상위 타입을 제한할 수 있습니다.
예시:
```kotlin
fun
return value.toDouble() / 2.0
}
```
Q6: 제네릭 타입 파라미터에 기본 값을 설정할 수 있나요?
A6: 코틀린 1.4 이상부터는 기본 타입 파라미터를 지정할 수 있습니다.
예시:
```kotlin
```
Q7: 공변성(covariance)과 반공변성(contravariance)은 무엇이며 코틀린에서 어떻게 표현하나요?
A7:
- 공변성(`out`): 서브타입 관계를 유지하며, 타입 파라미터를 출력(생성) 용도로만 사용.
- 반공변성(`in`): 서브타입 관계가 반대로 적용되며, 타입 파라미터를 입력(소비) 용도로만 사용.
예시:
```kotlin
interface Source
fun nextT(): T
}
interface Sink
fun accept(item: T)
}
```
Q8: 제네릭 타입을 사용할 때 타입 실체화(reified)가 필요한 경우 어떻게 하나요?
A8: 인라인 함수에서 `reified` 키워드를 사용해 런타임에 타입 정보를 유지할 수 있습니다.
예시:
```kotlin
inline fun
return this.fromJson(json, T::class.java)
}
```
Q9: 제네릭 타입과 nullable 타입은 어떻게 조합하나요?
A9: 타입 파라미터에 일반적으로 nullable 여부를 지정할 수 있으며, 함수나 클래스 선언시 명시합니다.
예시:
```kotlin
class Box
fun
```
Q10: 제네릭 타입에서 와일드카드는 어떻게 사용하는가요?
A10: 코틀린에서는 자바의 와일드카드 대신 공변성(`out`), 반공변성(`in`)을 사용하여 표현합니다. 예를 들어, 자바의 `List>`는 코틀린의 `List<*>`로 표현합니다.
---
이상은 코틀린에서 제네릭을 사용하는 주요 방법과 개념입니다.
제네릭을 사용하면 클래스, 인터페이스, 함수에서 특정 타입을 매개변수로 받아 사용할 수 있습니다.
이를 통해 다양한 타입에 대해 동일한 코드를 작성할 수 있으며, 타입에 대한 검사를 컴파일 타임에 수행할 수 있습니다.
1. 제네릭 클래스 제네릭 클래스를 정의하려면 클래스 이름 뒤에 타입 매개변수를 지정합니다.
예를 들어, 다음은 제네릭 클래스를 정의하는 방법입니다: ```kotlin class Box
이 클래스는 어떤 타입의 값을 가질 수 있습니다.
사용 예시: ```kotlin val intBox = Box(12
3) val stringBox = Box("Hello") println(intBox.getValue()) // 123 println(stringBox.getValue()) // Hello ```
2. 제네릭 함수 제네릭 함수는 함수 이름 뒤에 타입 매개변수를 정의하여 만들 수 있습니다.
다음은 제네릭 함수를 정의하는 예입니다: ```kotlin fun
사용 예시: ```kotlin printValue(4
2) // 42 printValue("Kotlin") // Kotlin ```
3. 제네릭 인터페이스 제네릭 인터페이스도 클래스와 마찬가지로 타입 매개변수를 사용할 수 있습니다.
다음은 제네릭 인터페이스의 예입니다: ```kotlin interface Container
4. 제네릭의 제한 제네릭 타입 매개변수에 제한을 두어 특정 타입만 사용할 수 있도록 할 수 있습니다.
이를 위해 `out`과 `in` 키워드를 사용할 수 있습니다.
- `out` : 공변성(covariance)을 나타내며, 타입 매개변수가 출력으로만 사용될 때 사용합니다.
- `in` : 반공변성(contravariance)을 나타내며, 타입 매개변수가 입력으로만 사용될 때 사용합니다.
예시: ```kotlin class Producer
5. 타입 제약 제네릭 타입 매개변수에 특정 타입을 제약할 수 있습니다.
예를 들어, 특정 클래스나 인터페이스를 상속받는 타입만 사용할 수 있도록 제한할 수 있습니다.
```kotlin fun
6. 제네릭의 사용 예 제네릭은 컬렉션 클래스에서도 널리 사용됩니다.
예를 들어, `List`, `Map`, `Set` 등은 모두 제네릭을 사용하여 다양한 타입의 데이터를 저장할 수 있습니다.
```kotlin val list: List
제네릭 클래스를 정의하고, 제네릭 함수를 작성하며, 제네릭 인터페이스를 구현하는 방법을 통해 다양한 타입에 대해 유연하게 코드를 작성할 수 있습니다.
또한, 타입 제약을 통해 특정 타입만을 허용함으로써 더욱 안전한 코드를 작성할 수 있습니다.
이러한 제네릭의 특성은 코틀린을 사용하는 데 있어 매우 중요한 요소입니다.
작성자:
이시우 [비회원]
| 작성일자: 1년 전
2024-09-09 09:47:13
조회수: 120 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 120 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.