SMALL
안녕하세요 YTS 입니다. 오늘은 코틀린의 클래스에 대해 적어보려합니다.
클래스
데이터 클래스
코틀린에서는 데이터 클래스라를 제공합니다. 여기선 프로퍼티들만 선언하면 hashCode(), equals(), toString() 함수를 자동으로 생성해줍니다. 각 예제들은 String template를 이용하여 출력 해보도록 하겠습니다.
*String template = $필드명/변수명 or ${표현식} 형태로 우리가 원하는 값이 대입된 문자열을 얻을 수 있습니다.
data class Animal(val name: String, val age: String) {
fun print() {
val elephant = Animal("Elephant", "10")
val elephant2 = Animal("Elephant", "10")
val tiger = Animal("Tiger", "20")
println("elephant == elephant2 = ${elephant == elephant2}") // elephant == elephant2 = true
println("elephant == tiger = ${elephant == tiger}") // elephant == tiger = false
println("tiger.hasCode() = ${tiger.hashCode()}") // tiger.hasCode() = 201812390
println("elephant.toString() = ${elephant.toString()}") // elephant.toString() = Animal("Elephant", "10")
println("tiger.toString() = $tiger") // tiger.toString() = Animal("Tiger", "20")
}
}
Getter / Setter
코틀린에서는 Getter 와 Setter는 프로퍼티의 선언과 함께 get(), set(value)를 사용하여 정의합니다.
class Zoo(val name: String, val age: Int) {
val adult: Boolean get() = age >= 18
var nickName: String = ""
set(value) {
field = value + " Nick"
}
}
한정 클래스
코틀린에서는 enum 클래스를 확장한 개념을 가진 클래스가 한정 클래스 (Sealed class) 입니다. 이러한 한정 클래스로 정의된 클래스를 종류에 따라 다른 작업을 할때 매우 유용합니다.
sealed class Zoo(val name: String) {
class Elephant(name: String, val nose: String) : Zoo("Elephant")
class Tiger(name: String, val eye: String) : Zoo("Tiger")
class Lion(name: String, val mouth: String) : Zoo("Lion")
fun whatAnimal(zoo: Zoo) = when (zoo) {
is Elephant -> {
println("${zoo.name} ${zoo.nose}")
}
is Tiger -> {
println("${zoo.name} ${zoo.eye}")
}
is Lion -> {
println("${zoo.name} ${zoo.mouth}")
}
}
}
whatAnimal에서 Zoo 클래스를 상속하는 모든 클래스들이 처리가 되어 있기때문에 when 절에 else 가 필요 없지만 만약 이외의 다른 클래스가 존재한다면 else 처리를 꼭 해주셔야합니다.
sealed class Zoo(val name: String) {
class Elephant(name: String, val nose: String) : Zoo("Elephant")
class Tiger(name: String, val eye: String) : Zoo("Tiger")
class Lion(name: String, val mouth: String) : Zoo("Lion")
fun whatAnimal(zoo: Zoo) = when (zoo) {
is Elephant -> {
println("${zoo.name} ${zoo.nose}")
}
is Tiger -> {
println("${zoo.name} ${zoo.eye}")
}
else -> { //꼭 처리
println("${zoo.name}")
}
}
}
LIST
'IT > kotlin' 카테고리의 다른 글
[fold 함수] fold 함수 알아보기 (0) | 2019.02.19 |
---|---|
[Kotlin] 코틀린 스트림 함수 (map, flatMap, groupBy, filter, take, drop, first, distinct, zip, joinToString, count, any, none, max, min, average) (2) | 2019.01.03 |
[Kotlin] 코틀린 흐름제어 (if-else, .., for, while, do-while when) (0) | 2018.12.19 |
[Kotlin] 코틀린 자료/ 자료형의 확인 및 변환 (==, ===, is, as, 스마트 캐스트) (0) | 2018.12.18 |
[코틀린] mvvm패턴 속 application context 가져오기 (0) | 2018.11.26 |