Kotlin 실드 클래스 입문서

2048 단어 kotlinandroid


다시 Kotlin을 사용할 때 작업을 즐겁게 해주는 이 언어의 뛰어난 기능이 기억납니다. 이 게시물에서는 봉인된 클래스 기능에 대한 빠른 입문서를 제공하고자 합니다.

새로운 기능이 아닙니다. Kotlin 및/또는 Android로 작업하는 대부분의 숙련된 엔지니어는 이미 이에 대해 알고 있을 것입니다. 하지만 다양한 경험과 배경을 가진 사람들이 Kotlin/Android 세계에 합류하고 있습니다. 그래서 제 생각에는 이 훌륭한 언어의 일부 "오래된"기능을 다시 방문할 가치가 있다고 생각합니다. 비록 경험이 적은 한 명의 엔지니어가 작업을 보다 효율적으로 만들 수 있는 무언가에 대해 배우는 데 도움이 되더라도 :)

더 이상 고민하지 않고 봉인된 클래스는 매우 특정한 수의 하위 클래스를 가질 수 있는 클래스입니다.

이것은 어디에 유용합니까? enum를 정의한 거의 모든 엔지니어는 (적어도) 일부 열거형 값에 대해 일부 추가 데이터를 저장해야 했습니다. 이 문제에 대한 가장 추악한 솔루션은 특정 열거형 값이 주석과 함께 활성화될 때만 사용되는 변수의 형태로 제공됩니다.

// ONLY filled when "status == DISCONNECTED"
var reason = ""


봉인된 클래스는 이 매우 일반적인 사용 사례(다른 것들 중에서)에 대해 매우 우아한 솔루션을 제공합니다. 봉인된 클래스에는 enum 의 미리 정의된 값과 유사하게 매우 특정한 수의 하위 클래스가 있으므로 필요한 경우에만 "enum"값 + 데이터를 그룹화할 수 있습니다.

sealed class Status { // 1.
    object Unknown : Status() // 2.
    class Disconnected(val reason: String? = null) : Status() // 3.
    object Connecting : Status()
    object Connected : Status()
}


  • 봉인된 클래스를 상속하는 모든 하위 클래스는 동일한 Kotlin 파일에 있어야 합니다. 기본적으로 봉인된 클래스는 추상 클래스입니다. 클래스 자체는 초기화할 수 없으며 하위 클래스만 초기화할 수 있습니다.
  • 하위 클래스에 보유할 추가 데이터가 없는 경우 대신 object 키워드 대신 class 키워드를 사용하여 싱글톤을 만들 수 있습니다.
  • 여기서 (연결이 끊긴) 이유는 연결이 끊긴 상태와 함께 그룹화됩니다. 나머지 하위 클래스는 자체 관련 데이터를 가질 수 있습니다(또는 전혀 없음).

  • 하위 클래스에 특정한 비즈니스 로직의 경우 스마트 캐스팅과 함께 강력한when 명령문을 사용하십시오.

    when (status) {
        is Status.Unknown -> [...]
        is Status.Disconnected -> // Access `it.status.reason`
        is Status.Connected, is Status.Connecting -> [...]
    }
    


    다행히도 이것이 유용했고 앱에서 이를 사용하여 코딩 생활을 좀 더 즐겁게 만들 수 있습니다.

    즐거운 코딩하세요!

    좋은 웹페이지 즐겨찾기