함수와 변수
fun hello() = println("hello")
// val은 재할당이 불가능, var는 재할당 가능
val apple: String = "apple"
var banana: String = "banana"
커스텀 접근자
// 커스텀 접근자
class Person(val firstName: String, val familyName: String) {
var age: Int? = null
set(value) {
if (value != null && value <= 0) {
throw IllegalArgumentException("Invalid age: $value")
}
field = value
}
}
enum & when
// enum & when
enum class Color {
RED,
ORANGE,
YELLOW
;
}
// java 스위치랑 비슷
fun getStringColor(color: Color) =
when (color) {
Color.RED -> "RED"
Color.ORANGE -> "ORANGE"
Color.YELLOW -> "YELLOW"
}
fun getStringColor2(color: Color) =
when (color) {
Color.RED, Color.ORANGE, Color.YELLOW -> "COLOR"
}
fun getStringColor3(color1: Color, color2: Color) =
when {
(color1 == Color.RED || color2 == Color.ORANGE) -> "RED ORANGE"
else -> throw RuntimeException()
}
객체
- 코틀린에서 객체 선언은 클래스와 상수를 합한 것이다.
- 객체 선언을 통해 싱글턴, 즉 인스턴스가 단 하나만 존재하는 클래스를 만들 수 있다.
- 컴파일러는 여러 스레드에서 싱글턴에 접근하더라도 오직 한 인스턴스만 공유되고 초기화 코드도 단 한 번만 실행 보장한다.
// 싱글턴을 선언할 때에는 class 대신 object 사용
object Application {
val name = "My Application"
override fun toString() = name
fun exit() { }
}