ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotlin] 컬렉션 처리, 로컬 함수
    Computer Science/Kotlin 2021. 1. 20. 00:13

    컬렉션 처리

    • vararg 키워드를 사용하면 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있음
    • 중위 함수 호출 구문을 사용하면 인자가 하나뿐인 메소드를 간편하게 호출할 수 있음
    • 구조 분해 선언을 사용하면 복합적인 값을 분해해서 여러 변수에 나눠 담을 수 있음

    가변 인자 함수 정의

    • 라이브러리에서 listOf 메서드를 보면 다음과 같음

    fun listOf<T>(vararg values: T) : list<T> { … }

    • 가변 길이 인자는 메소드를 호출할 때 원하는 개수만큼 값을 인자로 넘기면 자바 컴파일러가 배열에 그 값들을 넣어주는 기능

    • 자바에서는 타입 뒤에 …를 붙이지만 코틀린에는 파라미터 앞에 vararg 변경자를 붙인다

    • 이미 배열에 들어있는 원소를 가변 길이 인자로 넘길 때 자바에서는 배열을 그냥 넘기면 되지만 코틀린에서는 배열을 명시적으로 풀어서 배열의 각 원소가 인자자로 전달되게 해야함

    • (*) 스프레드 연산자를 통해 이를 구현

    중위 호출
    val map = mapOf(1 to "one", 7 to "seven", 53 to "fifty-three")

    • map을 만드려면 mapOf 함수를 사용
    • 여기서 to는 코틀린의 키워드가 아니고, 중위 호출이라는 특별한 방식으로 to라는 일반 메소드를 호출한 것
    • 중위 호출 시에는 수신 객체와 유일한 메소드 인자 사이에 메소드 이름을 넣음

    1.to("one")
    1 to"one"

    • 위의 두 문장은 같음

    • 함수를 중위 호출에 사용하게 허용하고 싶으면 infix 변경자를 함수 선언 앞에 추가해야 함

    • 이 to 함수는 Pair의 인스턴스를 반환함

    • Pair의 내용으로 두 변수를 즉시 초기화 가능

    • 이런 기능을 구조 분해 선언이라고 함

    • 구조 분해 선언을 이용한 for문

    로컬 함수

    • 코틀린에서는 함수에서 추출한 함수를 원 함수 내부에 중첩시킬 수 있음

    • 그렇게 하면 문법적인 부가 비용을 들이지 않고도 깔끔하게 코드를 조작할 수 있음

    • saveUser 함수 안에 validate 로컬 함수를 넣어서 name과 address 각각 검증

    • 코드 중복을 막을 수 있음

    • 로컬 함수 안에서는 자신이 속한 바깥 함수의 모든 파라미터와 변수를 사용할 수 있다

    댓글

Designed by Tistory.