[Kotlin] 5-1. 분리 선언
분리 선언
때때로 다음 예처럼 객체를 여러 변수에 분리해서 할당하는 것이 편리할 때가 있다
val (name, age) = person
이런 구문을 분리 선언이라고 부른다. 분리 선언은 한 번에 여러 변수를 생성한다. name과 age의 두 변수를 선언했고 각자 따로 사용할 수 있다
println(name)
println(age)
분리 선언은 다음과 같은 코드로 컴파일된다
val name = person.component1()
val age = person.component2()
component1()과 component2() 함수는 코틀린에서 광범위하게 사용하는 관례 규칙예다. 필요한 개수의 component함수를 호출할 수만 있으면 무엇이든 분리 선언의 오른쪽에 위치할 수 있다. 물론 component3()과 component4() 등이 존재할 수 있다.
componentN()함수에 operator키워드를 붙여야 분리 선언에서 그 함수를 사용할 수 있다
분리 선언은 또한 다음과 같이 for루프에서도 동작한다
for((a,b) in collection) { ... }
변수 a와 b는 콜렉션 요소의 component1()과 component2() 함수가 리턴한 값을 구한다
예제: 함수에서 두 값 리턴하기
함수에서 두 값을 리턴하고 싶다고 하자. 예를 들어 어떤 종류의 결과 객체와 상태를 리턴해야 한다고 가정하자. 코틀린에서 이를 간략하게 처리하는 방법은 데이터 클래스를 선언하고 그 클래스의 인스턴스를 리턴하는 것이다
data class Result(val result: Int, val status: Status)
fun function(...): Result {
// computations
return Result(result, status)
}
// 이제 이 함수를 사용한다
val(result, status) = function(...)
데이터 클래스는 자동으로 componentN() 함수를 선언하므로 여기서 분리 선언이 작동한다
예제: 분리 선언과 맵
맵을 순회하는 가장 나은 방법은 아마도 다음일 것이다
for((key, value) in map) {
// 키와 값으로 무엇을 함
}
사용하지 않는 변수를 위한 밑줄
분리 선언에서 변수가 필요 없으면 이름 대신에 밑줄을 사용할 수 있다
val(_, status) = getResult()
이 방식으로 생략한 component에 대해 componentN() 연산자 함수를 호출하지 않는다