본문 바로가기
프로그래밍/Kotlin

Kotlin - 함수(function)

by pentode 2021. 7. 26.

※ 함수의 정의

함수는 fun 키워드로 시작합니다.

※ main 함수

- main 함수는 프로그램의 시작점입니다. 프로그램을 실행하면 메모리로 로드된 프로그램에서 main 함수를 찾아서 실행합니다.
- 매개변수 args는 문자열 배열로 명령행에서 실행 프로그램명 뒤에 따라오는 인자들을 받아들입니다.

fun main(args : Array<String>) {
    /* ... */
}

// 명령행 인자를 받지 않는 형태도 가능합니다.
fun main() {
    /* ... */
}


- 매개변수는 함수내로 값을 보내기 위해 사용됩니다. 여러개의 매개 변수가 콤마(,)로 분리되어 사용될 수 있습니다. 매개 변수가 없을 수도 있습니다.
- 함수가 값을 반환하면 반환 타입을 지정해 줘야 합니다.
- 값의 반환은 return 문 뒤에 값 또는 값으로 평가되는 표현식을 사용할 수 있습니다.

 

fun 함수명(매개변수): 반환 타입 {
    return 값 또는 표현식
}

fun plus(x: Int, y: Int): Int {
    return x + y
}


- 반환값이 없는 함수를 만들때는 반환 타입 부분을 비워두던가 Unit 타입을 반환하도록 지정합니다. 둘은 동등합니다.
- 반환값이 없으므로 뒤에 아무것도 오지 않는 return 문을 쓰던가 아무것도 쓰지 않아도 됩니다. 반환하는 return을 쓰는 경우는 주로 어떤 조건에 따라 일찍 반환하거나 할때 사용됩니다.

 

fun 함수명(매개변수) {
}

func 함수명(매개변수): Unit {
    return
}

fun printX(x: Int) {
    println(x)
}

fun printX(x: Int): Unit {
    println(x)
    return
}


- 함수가 반환하지 않을 경우 Nothing을 반환 타입으로 지정할 수 있습니다.

 

// 함수내에 무한루프이므로 반환하지 않는 경우 입니다.
fun run(): Nothing {
    while(true) {
        /* ... */
    }
}

// 함수가 예외를 던지므로 반환하지 않습니다.
fun fail(msg: String): Nothing {
    throw NotImplementedError(msg);
}


※ 매개변수

- 매개변수는 함수에 데이터를 보내는 방법 입니다. 매개변수는 없을수도 있고, 여러개가 될 수도 있습니다.
- 매개변수가 여러개일 경우에는 콤마(,)로 분리합니다.

- 매개변수 리스트에 트레일링 콤마(Trailing comma)를 지원합니다. 트레일링 콤마는 마지막 매개변수의 끝에도 콤마를 쓸 수 있는 것입니다. 이를 사용하므로 코드를 작성할때 매개변수의 순서를 바꾸거나 마지막에 매개변수를 추가할때 콤마를 추가하거나 삭제해야하는 불편함이 없으므로 편리하게 코드를 작성할 수 있습니다.

 

fun plus(
   a: Int,
   b: Int,
   c: Int, // trailing comma
): Int {
    return a + b + c
}


- 매개변수에 기본값을 줄 수 있습니다.

 

fun plus(x: Int = 0, y: Int = 0): Int {
    println("x : " + x)
    println("y : " + y)
    return x + y
}

// x, y 모두 기본값이 사용됩니다.
var z: Int = plus()

// y에 기본값이 사용됩니다.
var z: Int = plus(1)

// 파라미터 이름을 사용하여 x는 기본값을 주고, y에는 주어진 값이 사용됩니다.
var z: Int = plus(y = 2)


- vararg 지시자를 사용하여 매개변수의 갯수를 동적으로 줄 수 있습니다.

 

// 동적변수를 받아 모두 더합니다.
fun plus(vararg param: Int): Int {
var total: Int = 0
for(p in param) {
total += p
}
return total
}

var z: Int = plus(1, 2, 3, 4, 5)


※ 단일 표현식 함수(Single-expression functions)

- 함수가 하나의 표현식을 반환한다면 함수 본체를 나타내는 중괄호를 생략하고 등호(=) 뒤에 표현식을 쓸 수 있습니다.

 

// 하나의 표현식을 반환하므로 중괄호 생략하고 등호(=) 뒤에 반환하는 표현식 바로 사용.
fun plus(x: Int, y: Int): Int = x + y

// 반환값을 명시적으로 지정하지 않아도 컴파일러에 의해 추론되어질 수 있습니다.
fun plus(x: Int, y: Int) = x + y

var z: Int = plus(1, 2)


※ 함수 범위

- 함수는 파일내에 최상위 레벨에 정의 되어질 수 있습니다.
- 함수는 객체 내부에 정의될 수 있습니다. 이를 멤버 함수라고 합니다.
- 함수는 함수내부에 정의될 수 있습니다. 이름 로컬 함수 라고 합니다.

 

// 최상위 레벨에 정의된 main 함수로 프로그램의 시작점입니다.
fun main(args: Array<String>) {
    println( plus(1, 2) )
    
    printHello("하하);
    
    // 클래스 생성 및 멤버함수 호출
    var car = Car()
    car.footBreak()
}

// 파일의 최상위 레벨에 정의된 함수 입니다.
fun plus(x: Int, y: Int): Int {
    return x + y
}

// 클래스를 정의 합니다.
class Car {
    // 함수내에 정의 된 멤버 함수 입니다.
    fun bootBreak() {
        println("브레이크")
    }
}

// 함수내부에 로컬 함수를 가지는 경우 입니다.
fun printHello(name: String): Unit {
    print("안녕, ")
    fun printName(): Unit {
        println(name);
    }
    printName();
}
반응형