코틀린에서 인라인 클래스(inline class)는 주로 간단한 래퍼(wrapper) 타입을 만들 때 사용됩니다. 이 클래스는 컴파일 시간에 인라인되어 런타임에는 실제 타입으로 대체되므로, 런타임 오버헤드 없이 새로운 타입을 만들 수 있습니다. 인라인 클래스는 특정한 상황에서 사용되어야 하며, 특히 특정 타입을 명시하는 것이 의미 있는 경우에 사용됩니다.
인라인 클래스를 정의하려면 inline 키워드를 사용하고, 주 생성자에 단일 프로퍼티를 가져야 합니다.
inline class Wrapper(val value: Int)
위의 예제에서 Wrapper 클래스는 value라는 하나의 정수형 프로퍼티를 가지고 있습니다.
인라인 클래스는 일반 클래스와 마찬가지로 메서드나 프로퍼티를 가질 수 있습니다. 예를 들어,
inline class Wrapper(val value: Int) {
fun printValue() {
println(value)
}
}
이제 Wrapper 클래스의 인스턴스를 생성하고 메서드를 호출할 수 있습니다.
val wrapper = Wrapper(42)
wrapper.printValue() // 출력: 42
주의사항과 제약사항
1. 인라인 클래스의 프로퍼티는 val이어야 합니다.
인라인 클래스의 프로퍼티는 불변(immutable)이어야 합니다. 따라서 val로 선언되어야 합니다.
// 올바른 사용
inline class Wrapper(val value: Int)
// 오류: var로 선언된 프로퍼티는 허용되지 않음
inline class InvalidWrapper(var value: Int)
2. 인라인 클래스는 상속이나 구현이 허용되지 않습니다
인라인 클래스는 기존 클래스를 확장하거나 인터페이스를 구현할 수 없습니다.
// 올바른 사용
inline class Wrapper(val value: Int)
// 오류: 상속이나 구현이 허용되지 않음
inline class InvalidWrapper(val value: Int): SomeClass()
3. 컴파일 시간에 인라인됨
인라인 클래스는 컴파일 시간에 다른 코드로 대체되기 때문에, 리플렉션을 통한 접근이 불가능합니다.
val wrapper = Wrapper(42)
// 오류: 리플렉션을 통한 접근이 불가능
val value = wrapper::class.java.getField("value").get(wrapper)
인라인 클래스는 래퍼 타입을 간단하게 정의하고, 새로운 타입을 만들어내기 위한 용도로 유용합니다. 그러나 주의해서 사용해야 하며, 특히 특정 문제를 해결하거나 코드를 최적화하기 위해 필요한 경우에만 사용하는 것이 좋습니다.
With ChatGPT
'Kotlin > 포스팅' 카테고리의 다른 글
코틀린 컬렉션 타입 (0) | 2023.12.31 |
---|---|
코틀린 부호 없는 정수 (0) | 2023.12.31 |
코틀린 구조 분해 선언 (0) | 2023.12.31 |
코틀린 데이터 클래스 연산 (0) | 2023.12.31 |
코틀린 데이터 클래스 (0) | 2023.12.31 |