Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- xcode
- 스페인여행
- 지팍스페인
- SwiftUI #Skeleton #데이터갱신
- 도심공항
- Device 등록
- Concurrency #Swift #Combine
- 그라나다
- 아시아나
- swiftUI
- 크로아티아
- 스쿠버다이빙
- 라이브러리
- Cocoapods #PrivateRepo #SpecRepo
- 공기먹는다이버스
- 대한항공
- Gradle
- 스플리트
- 세비야
- 러브스플리트
- 푸켓여행
- 러브자그레브
- 스페인광장
- 괌 자유여행
- cocoapod
- 강릉
- Swift #Concurrency #쓰레드
- 시밀란
- 연금저축펀드
- 리브어보드
Archives
- Today
- Total
JEP's Diary
Sealed Class 본문
Sealed Class 사용 X
여러개의 자식클래스들이 A라는 부모클래스를 상속받았다고 했을때, 컴파일러는 A 클래스를 상속 받은 자식 클래스들이 있는지 알지 못한다. 따라서 when에서 상태에 따라 처리를 해주려면 else 처리도 같이 해주어야 한다.
// 부모클래스
abstract class ListState
// 자식클래스
class Loading: ListState()
class Success: ListState()
class Failure: ListState()
// ListState에 따라 동작하는 함수
fun doListState(listState: ListState): String {
return when(listState) {
is Loading -> { "Loading" }
is Success -> { "Success" }
is Failure -> { "Failure" }
else -> { "Other"} // 없으면 에러 발생
}
}
Sealed Class 사용 O
Sealed Class는 추상클래스(abstract class)로 상속 받는 자식 클래스의 종류를 제한하는 특성이 있다. 즉, 컴파일러는 sealed class의 자식 클래스가 어떤 것인지 알 수 있다. 따라서 위의 코드에서 else 처리를 하지 않아도 된다. 또한 ListState를 상속받는 자식 클래스가 추가 되었을때는 when문에서도 추가 처리를 해주어야 한다.
sealed class ListState
object Loading: ListState()
object Success: ListState()
object Failure: ListState()
data class Proceeding(val percentage): ListState() // 자식 클래스 추가
// ListState에 따라 동작하는 함수
fun doListState(listState: ListState): String {
return when(listState) {
is Loading -> { "Loading" }
is Success -> { "Success" }
is Failure -> { "Failure" }
is Proceeding -> { "Proceeding" } // 추가
}
}
object는 싱글톤이다. 따라서 상태(변수)가 없거나 equals를 오버라이드 할 필요가 없는 경우에는 object를 쓰면 메모리 낭비를 하지 않는다.
Sealed Class 특징
- 상태값(변수)을 포함하고 있는 여러 instance를 가질 수 있다. 따라서 생성자도 각각의 특징에 따라 달라질 수 있다.
- 생성자는 protected(by default) 이거나 private이다. 따라서 같은 패키지의 자식 클래스만 상속 가능하다.
- 추상클래스로 직접 객체 인스턴스 생성이 불가능하고, (Sealed types cannot be instantiated) abstract 멤버를 가질 수 있다.
참고
'Development > Kotlin' 카테고리의 다른 글
코틀린 헷갈리는 함수 정리. let, apply, run, with (0) | 2019.02.02 |
---|---|
3.자바와는 다른 코틀린의 특징 (0) | 2019.01.01 |
2. 자바와 비교해 보는 코틀린 2 (0) | 2018.11.11 |
2. 자바와 비교해 보는 코틀린 1 (0) | 2018.08.31 |
1.코틀린이란? (0) | 2018.08.25 |