💽
data class, sealed class
March 08, 2023
data class
-
데이터를 담기 위한 클래스
-
toString()
,hashCode()
,equals()
,copy()
메소드를 자동으로 생성- override하면 직접 구현한 코드를 사용
fun main() { val person = Person("수지", 24) val dog = Dog("해피", 24) println(person.toString()) // Person@880ec60 println(dog.toString()) // Dog(name=해피, age=24) println(dog.copy(age = 3)) // Dog(name=해피, age=3) } data class Dog( val anme: String, val age: Int ) class Person( val name: String, val age: Int, )
-
한 개 이상의 프로퍼티가 있어야 함
-
데이터 클래스는 abstract, open, sealed, inner를 붙일 수 없음
-
상속이 불가능
- 상속받았을 때 자동으로 생성되는 메소드 네 개가 어떻게 될지 모르기 때문
sealed class
- 추상 클래스로, 상속받은 자식 클래스의 종류를 제한
- 컴파일러가 sealed class의 자식 클래스가 어떤 것인지 앎
- when과 함께 쓰일 때 장점을 느낄 수 있음
abstract class Cat
class BlueCat : Cat()
class GreenCat : Cat()
class RedCat : Cat()
fun main() {
val cat: Cat = BlueCat()
val result = when(cat) {
is BlueCat -> "blue"
is RedCat -> "red"
is GreenCat -> "green"
else -> "none" // abstract class는 else가 꼭 필요
}
printlnt(result)
}
sealed class Cat
class BlueCat : Cat()
class GreenCat : Cat()
class RedCat : Cat()
fun main() {
val cat: Cat = BlueCat()
val result = when(cat) {
is BlueCat -> "blue"
is RedCat -> "red"
is GreenCat -> "green"
// selaed class는 else가 필요없음
}
printlnt(result)
}
- RecyclerView의 뷰 타입 체킹할 때 사용