fun main(){
///////// data class 예시 /////////
val person=Person("수지",24)
val dog=Dog("해피",23)
println(person.toString()) // 그냥 참조 주소값이 나옴
// 출력: org.techtown.part0.kotlin.part2.Person@2acf57e3
println(dog.toString()) // 데이터 클래스의 경우 안의 데이터를 볼 수 있는 tostring 함수가 구현됨
// 출력 : Dog(name=해피, age=23)
println(dog.copy(age=3)) // 원래 있던 객체의 age만 변경된 값을 가져올 수 있음
//Dog(name=해피, age=3)
///////// data class 예시 /////////
//////////// sealed class 예시 ///////////
val cat:Cat1=BlueCat1()
val result=when(cat){
is BlueCat1 ->"blue"
is RedCat1 ->"red"
is GreenCat1 -> "green"
else -> "none"
// 'when' 이라는 expression 은 else가 필수 였음
// Cat1 이라는 추상클래스를 상속받은 애는 Blue,Red,GreenCat 세개 뿐인데
// 세개 말고는 else로 들어갈 케이스가 없음 그러나 컴파일러는 Cat1 이하의 상속받은 애들을 전혀 모르는 상태
}
val cat2:Cat2=BlueCat2()
val result2=when(cat2){
is BlueCat2 ->"blue"
is RedCat2 ->"red"
is GreenCat2 -> "green"
// else를 써주지 않아도 됨
// cat2 이라는 클래스가 sealed 클래스가 되면서, 컴파일러가 어떤 자식들을 가지고 있는지 알게됨
// --> else 브랜치가 필요 없게됨
// 장점 : 즉 빠진게 있으면 넣으라고 알려줌 else라는 모호한 문도 쓰지 않아도 됨
}
//////////// sealed class 예시 ///////////
}
// Data Class //
class Person(
val name:String,
val age:Int
)
class Cat() // 그냥 클래스의 경우 아무 property도 없어도 상관 없는데
data class Dog( // data 클래스의 경우 반드시 하나 이상의 property가 있어야한다.
val name:String,
val age:Int
)
/*
data class Corgi( ////오류 발생!
val pretty:Boolean
):Dog() // 데이터 클래스는 상송이 불가능하다
*/
// sealed class 실드 클래스는 추상 클래스임
abstract class Cat1 // 추상클래스로 선언
class BlueCat1 : Cat1() // 그냥 클래스로 상속
class RedCat1:Cat1()
class GreenCat1:Cat1()
sealed class Cat2 // sealed class로 선언
class BlueCat2 : Cat2()
class RedCat2:Cat2()
class GreenCat2:Cat2()
'안드로이드 프로그래밍 > 문법정리' 카테고리의 다른 글
[kotlin] 코틀린 enum class (열거 클래스) (0) | 2024.05.28 |
---|---|
[kotlin] 초기화 지연(lazy initialization) (0) | 2023.08.14 |
[kotlin] 코틀린 스코프 함수 let, with, run, apply, also 차이 비교 정리 (0) | 2023.08.10 |
[kotlin] 접근 제한자(Visibility Modifiers) (0) | 2023.01.27 |
[kotlin] 생성자 (0) | 2023.01.26 |