코틀린 (Kotlin) 유용한 도구 및 확장함수, 확장 프로퍼티
sealed class 사용 sealed class Result< out T : Any> { data class Success< out T : Any>( val data : T ) : Result< T >() sealed class Error( val exception : Exception) : Result<Nothing>() { class RecoverableError(exception: Exception) : Error(exception) class NonRecoverableError(exception: Exception) : Error(exception) } object InProgress : Result<Nothing>() } sealed class 는 동일한 파일 또는 중첩 클래스로 정의해야 한다. sealed class 인 Result 클래스는 private 생성자로 생성된다. sealed class 인 Error 클래스는 private 생성자로 접근할 수 없다. val r : Result<Int> = Result.Error(Exception("error")) //컴파일 에러 발생 컴파일러만이 사용할 수 있는 생성자를 생성한다. InProgress 는 저장할 상태가 없기때문에 불필요한 할당을 피하기위해서 싱글톤으로 생성했다.(object) val result = when (result) { is Result.Success -> TODO () is Result.Error.RecoverableError -> TODO () is Result.Error.NonRecoverableError -> TODO () is Result.InProgress -> TODO () } when 구문을 사용했을 때 sealed clas