+ 항공대학교 김철기 교수님의 객체 지향 프로그래밍 과목 내용를 정리한 글입니다.
enum 클래스
enum class Result {
SUCCESS, ERROR
}
fun runComputation(): Result {
val a = readLine()?.toIntOrNull() ?: return Result.ERROR
val b = readLine()?.toIntOrNull() ?: return Result.ERROR
println("Sum: ${a + b}")
return Result.SUCCESS
}
fun main() {
println(when (runComputation()) {
Result.SUCCESS -> "Completed Successfully"
Result.ERROR -> "Error!"
})
}
상속을 통한 enum의 대체
상속을 통할 경우 변종별로 다른 특성을 반영할 수 있다.
import java.lang.Exception
abstract class Result {
class Success(val value: Any) : Result() {
fun showResult() {
println(value)
}
}
class Error(val message: String) : Result() {
fun throwException() {
throw Exception(message)
}
}
}
fun runComputation(): Result {
val a = readLine()?.toIntOrNull() ?: return Result.Error("First argument is invalid")
val b = readLine()?.toIntOrNull() ?: return Result.Error("Second argument is invalid")
return Result.Success(a + b)
}
fun main() {
println(when (val result = runComputation()) {
is Result.Success -> "Completed Successfully ${result.value}"
is Result.Error -> "Error! ${result.message}"
else -> return // else가 들어가야 하는 것이 뭔가 이상함
})
}
sealed class (봉인된 클래스)
상속하는 하위 클래스의 정의를 같은 파일 내부로 제한한다.
함부로 상속하여 해당 class의 완결성을 저해할 수 없도록 정의한다.
import java.lang.Exception
sealed class Result { // 내부에 정의된 두 클래스만 상속 받을 수 있다.
class Success(val value: Any) : Result() {
fun showResult() {
println(value)
}
}
class Error(val message: String) : Result() {
fun throwException() {
throw Exception(message)
}
}
}
fun runComputation(): Result {
val a = readLine()?.toIntOrNull() ?: return Result.Error("First argument is invalid")
val b = readLine()?.toIntOrNull() ?: return Result.Error("Second argument is invalid")
return Result.Success(a + b)
}
fun main() {
println(when (val result = runComputation()) {
is Result.Success -> "Completed Successfully ${result.value}"
is Result.Error -> "Error! ${result.message}"
// result는 Result의 하위 클래스. 즉 무조건 Success 또는 Error 클래스이기 때문에 else를 사용하지 않아도 된다.
})
}
+ 에디터 오류로 빨간 줄이 있을 수 있으나 컴파일은 가능하다.
'Study > Kotlin Study' 카테고리의 다른 글
[Kotlin] 컬렉션 유틸리티 (1) | 2023.11.21 |
---|---|
[Kotlin] 컬렉션 타입 (0) | 2023.11.20 |
[Kotlin] 부호 없는 정수 (0) | 2023.11.14 |
[Kotlin] data 클래스 (0) | 2023.11.14 |
[Kotlin] enum 클래스 (1) | 2023.11.13 |