inline class
특정 class의 Default 생성자의 프로퍼티가 하나일 경우 inline을 사용하면, 해당 객체를 사용하는 위치가 모두 해당 프로퍼티로 교체된다.
inline class Millis(private val time: Int) {
// ...
}
이러한 inline 클래스는 타입만 일치한다면 값을 바로 넣는 것도 가능하다.
val time: Millis = Millis(3000)
// 컴파일 시 다음 형태로 변경
val time: Int = 3000
inline 클래스에 존재하는 메서드는 컴파일 시 모두 정적 메서드로 만들어진다.
inline class Name(private val value: String) {
fun greet() {
print()
}
}
// 실제 코드
val name: Name = Name("Damon")
name.greet()
// 컴파일 시
val name: String = "Damon"
Name.'greet-impl'(name)
이러한 성질로 측정 단위를 표현할 때 매우 유용한다.
타입 오용으로 발생하는 문제
DB는 일반적으로 ID를 통해 요소를 식별한다. 이 과정에서 ID는 숫자일 경우가 많은데, 여러 테이블에서 각각 ID가 존재한다. 이 때, 전부 같은 Int 등의 타입을 활용하면 실수로 잘못된 값을 넣을 수도 있고, 어떤 오류도 발생하지 않아 문제를 찾기 어렵다. 이때, inline 클래스를 다음과 같이 사용한다.
inline class StudentId(val studentId: Int)
data class Grades(
@ColumnInfo(name = "studentId")
val studentId: StudentId
)
'안드로이드 > Kotlin' 카테고리의 다른 글
8. Effective Kotlin - 사용하지 않는 객체의 레퍼런스를 제거하라 (0) | 2022.04.01 |
---|---|
6. Effective Kotlin - 함수를 파라미터로 갖는 함수에 inline을 사용하라 (0) | 2022.03.20 |
5. Effective Kotlin - 효율성 (0) | 2022.03.20 |
4. Effective Kotlin - 가독성 (0) | 2022.03.19 |
3. Effective Kotlin - 결과 부족 시 null & Failure를 사용하라 (0) | 2022.03.17 |