type
Table of Contents
File
Interface
-
인터페이스는 어떻게(how)가 아닌 무엇(what)을 구현해야 하는지를 명시하는 것
Creature.kt
interface Fightable {
var healthPoints: Int
val diceCount: Int
val diceSides: Int
val damageRoll: Int
fun attack(opponent: Fightable): Int (1)
}
| 1 | 헤더만 선언하고 몸체의 구현코드가 없는 함수를 추상 함수(abstract function)라고 한다. |
인터페이스 구현하기
class Player(
_name: String,
override val healthPoints: Int = 100, (1)
val isBlessed: Boolean = false,
private val isImmortal: Boolean
) : Fightable { (2)
// ...
}
| 1 | 오버라이드할 속성은 override 키워드를 사용한다. |
| 2 | 콜론(:)을 통해 구현한다. |
Object
object CarFactory {
val cars = mutableListOf<Car>()
fun makeCar(horsepowers: Int): Car {
val car = Car(horsepowers)
cars.add(car)
return car
}
}
class Car(power: Int) {
}
-
코틀린에는 static이란 개념이 없음
-
object키워드를 통해 싱글턴 지원(java의 static과 유사)
Companion object
class Car(val horsepowers: Int) {
companion object Factory {
val cars = mutableListOf<Car>()
fun makeCar(horsepowers: Int): Car {
val car = Car(horsepowers)
cars.add(car)
return car
}
}
}
fun main(args: Array<String>) {
val car = Car.makeCar(150)
val car2 = Car.Factory.makeCar(150)
println(Car.Factory.cars.size)
}
-
클래스 내에 하나만 생성 가능