computer_study

[Kotlin] 06. 특별한 클래스 사용하기 본문

스터디/코틀린 완벽 가이드

[Kotlin] 06. 특별한 클래스 사용하기

knowable 2022. 5. 27. 02:08

1. 이넘 클래스

미리 정의된 상수들로 이뤄진 제한된 집합을 표현하는 특별한 클래스

// 코틀린
enum class WeekDay{
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
    
    // 함수, 프로퍼티, 주생성자, 부생성자, 초기화블록 등을 포함할 수 있다.
    // 이넘상수 목록 뒤에 와야 하고, 위의 것들을 포함한다면 목록 뒤에 ;를 붙여야 한다.
}

fun WeekDay.isWorkDay() = 
    this == WeekDay.Saturday || this == WeekDay.Sunday
    
fun main(){
    println(WeekDay.Monday.isWorkDay()) // false
}

// 자바 enum class가 아닌 enum으로
public enum WeekDay {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}

 

when식 사용

자바 switch문은 이넘 값을 간단한 이름으로만 사용하지만 코틀린은 긴 이름으로 사용할 수 있다.

kotlin

import Direction.* // 이넘 상수를 임포트하면 짧은 이름으로 이넘상수 사용 가능

enum class Direction{
    NORTH, SOUTH, WEST, EAST
}

fun rotateClockWise(direction: Direction) = when(direction){
    NORTH -> EAST
    EAST -> SOUTH
    SOUTH -> WEST
    WEST -> NORTH
}

java

public Direction rotateClockWise(Direction d){
    switch (d){
        case NORTH: return Direction.EAST;
        case EAST: return Direction.SOUTH;
        case SOUTH: return Direction.WEST;
        case WEST: return Direction.NORTH;
    }
    ...
}

 

 

 

2. 데이터 클래스

데이터를 저장하기 위한 목적으로 쓰이는 클래스

기능 사용 시 컴파일러가 동등성을 비교하거나 String으로 변환하는 등의 기본 연산에 대한 구현을 자동 생성한다.

class Person(val firstName: String,
             val familyName: String,
             val age: Int)

 

 

3. 인라인 클래스

// 코틀린 1.3까지는 inline 키워드 사용
inline class Password(val value: String)

val password = Password("Your password")

// 코틀린 1.5부턴 value로 키워드 변경
@JvmInline // JVM 백엔드를 사용하는 경우에 붙여준다.
value class Dollar(val amount: Int)
@JvmInline
value class Euro(val amount: Int)

// 자체 함수와 프로퍼티를 포함할 수 있다.
@JvmInline
inline class Dollar(val amount: Int){
    fun add(d: Dollar) = Dollar(amount + d.amount)
    val isDebt get() = amount < 0 //var도 가능하지만 인라인 클래스 내부에는 가변 상태가 없다(의미x)
}

fun main(){
    println(Dollar(15).add(Dollar(2)).amount) // 35
}

 

 

Comments