public(공개)이라는 변경자도 있다. 하지만 최상위 함수는 디폴트로 공개 가시성을 갖기 때문에 이 변경자는 불필요한 중복일 뿐이다.

    지역 변수처럼 함수 내부에 지역 함수를 정의할 수 있으며, 이 함수의 영역은 함수를 감싸는 블록으로 한정된다.

    fun main() {
      fun readInt() = readLine()!!.toInt()
      println(readInt() + readInt())
    }
    
    fun readIntPair() = intArrayOf(readInt(), readInt()) // error: unresolved reference: readInt

    지역 함수는 자신을 둘러싼 함수, 블록에 선언된 변수나 함수에 접근할 수 있다. 이런 변수에는 지역 함수를 둘러싸고 있는 함수의 파라미터도 포함된다.

    fun main(args: Array<String>) {
      
      fun swap(i: Int, j: Int): String {
        val chars = args[0].toCharArray()
        val tmp = chars[i]
        chars[i] = chars[j]
        chars[j] = tmp
        return chars.concatToString()
      }
      
      println(swap(0, args[0].lastIndex))
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.