안드로이드 개발자의 창고
[17일차 Kotlin] Sealed Class 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 Sealed Class란?
- 열거형은 특정 값을 의미하는 상수들을 모아 관리하는 개념이라면 Sealed Class를 객체를 모아 관리하는 개념이다.
- 열거형의 경우 상수에 지정된 값은 절대로 변경이 불가능 하지만 Sealed Class를 객체를 관리하는 개념이므로 객체가 가지고 있는 변수에 값을 설정하여 지정된 값을 변경하는 것이 가능하다.
- 열거형 사용 시 상수가 의미하는 값을 수시로 변경하거나 다양한 형태로 사용하고자 할 때 사용한다.
📖 예제 코드
fun main() {
val s1 = Number1.OneClass(100, 200)
val s2 = Number1.TwoClass(300)
val s3 = Number1.ThreeClass(100, 11.11)
val s4 = Number1.TwoClass(400)
checkNumber1(s1)
checkNumber1(s2)
checkNumber1(s3)
checkNumber1(s4)
}
sealed class Number1{
open fun number1Method(){
println("number1 메서드 입니다")
}
class OneClass(var a1:Int, var a2:Int) : Number2()
class TwoClass(var a1:Int) : Number2(){
fun twoMethod(){
println("TwoClass의 메서드 입니다")
}
override fun number2Method(){
println("overriding된 number2메서드")
}
}
class ThreeClass(var a1:Int, var a2:Double) : Number2()
}
fun checkNumber1(obj1:Number1){
when(obj1){
is Number1.OneClass ->{
// 스마트 캐스팅도 이루어진다.
println("OneClass 입니다")
println(obj1.a1)
println(obj1.a2)
obj1.number1Method()
}
is Number1.TwoClass -> {
println("TwoClass 입니다")
println(obj1.a1)
obj1.twoMethod()
obj1.number1Method()
}
is Number1.ThreeClass -> {
println("ThreeClass 입니다")
println(obj1.a1)
println(obj1.a2)
obj1.number1Method()
}
}
}
✔️ 코드 해석
- Sealed 클래스 내부에 정의한 클래스의 객체를 생성한다.
- Sealed 클래스는 자신을 상속받은 클래스를 모아 관리하는 개념이다.
- 추상클래스는 오버라이딩을 강제하기 위한 것이므로 전혀 다르다.
- 여러 자식 클래스를 가지는 것이 아닌 클래스들을 관리하기 위한 목적이다.
- when(obj1){ ... }
- when 으로 분기할 때 is를 통해 어떤 클래스를 통해 만든 객체인지 검사한다.
✔️ Console 출력 결과
'Computer > Kotlin' 카테고리의 다른 글
[18일차 Kotlin] Scope Function(범위 지정 함수 - let, apply, run, with, also) (0) | 2023.05.23 |
---|---|
[18일차 Kotlin] 고차 함수 (0) | 2023.05.23 |
[17일차 kotlin] 열거형 클래스(Enum Class) (0) | 2023.05.20 |
[17일차 Kotlin] Null 안전성을 위한 형변환(Null Casting) (0) | 2023.05.20 |
[17일차 Kotlin] Casting(캐스팅) (0) | 2023.05.20 |