JavaScript 를 별로 안 좋아하지만 JavaScript 에서는 다음과 같은 편리한 문법이 가능하다.
// 함수 반환
function func() {
return [10, 20];
}
// 사용
const [a, b] = func();
// React hooks
const [value, setValue] = useState();
함수에서는 배열을 반환하고, 그 값을 한 번에 초기화할 수 있다. 코틀린에서도 조금 불편하긴 비슷한 문법이 가능하다.
fun main(args: Array<String>) {
val person = Person("algosketch", 24)
val (name, age) = person
println("이름 : $name, 나이 : $age")
}
data class Person(val name: String, val age: Int)
data class 로 선언된 클래스의 인스턴스의 값은 구조분해 선언이 가능하다. 일반 클래스에서는 componentN(N <= 5) 연산자 오버로딩을 통해 구현할 수 있다.
fun main(args: Array<String>) {
val person = Person("algosketch", 24)
val (name, age) = person
println("이름 : $name, 나이 : $age")
}
class Person(val name: String, val age: Int) {
operator fun component1(): String {
return name
}
operator fun component2(): Int {
return age
}
}
일반 클래스의 경우 위와 같이 componentN 연산자를 오버로딩 해야 구조 분해 선언이 가능하다. 언어 차원에서 componentN 연산자를 무한히 지원할 수 없으므로 N 의 최대 값은 5이다. 배열과 컬렉션에도 componentN 함수가 있다. Map 컬렉션은 다음과 같이 이용 가능하다.
val frameworks = mapOf("java" to "Spring", "kotlin" to "Android")
for ((key, value) in frameworks) {
println("key = ${key} -> value = ${value}")
}
'java & kotlin' 카테고리의 다른 글
[RxKotlin] 2. Observable (콜드 옵저버블, 핫 옵저버블, Subject) (0) | 2022.02.20 |
---|---|
[RxKotlin] 1. 기본 개념 (Observable 과 Observer) (0) | 2022.02.11 |
[kotlin] 람다와 invoke (0) | 2021.12.24 |
[kotlin] 고차함수와 람다 (0) | 2021.12.13 |
thread safe vs thread unsafe (1) | 2021.03.30 |