[코틀린 기초] Function 함수 예제 모음.

코틀린은 자바보다 다양한 함수 사용 스타일을 보여준다.

 

default Parameter나 named argument를 봤을 때는 자바를 사용하는 실무에서 마주칠법한 오류에 많은 도움이 될 것 같아보였다. 다른 내용들은 기본적인 내용이므로 코틀린을 많이 작성하다 보면 잘 익어갈만한 내용으로 보인다!

 


 

기본적인 함수

fun sum(num1 : Int, num2 : Int) : Int {
    return num1 + num2
}

표현식 스타일 함수

fun sum2(num1 : Int, num2 : Int) : Int = num1 + num2

표현식과 반환 타입을 생략 가능한 함수

fun sum3(num1 : Int, num2 : Int) = num1 + num2

(단계가 어째 자바 람다식 축약하는 것 같다...)

 

코틀린에서 함수는 몸통({})이 있는 경우 반환 타입을 제거하면 컴파일 오류가 발생한다.

// 몸통이 있는 함수는 반환 타입을 제거하면 컴파일 오류
fun sum4(num1 : Int, num2 : Int) : Int /* 이거 제거하면 안됨. */ {
    return num1 + num2
}

 

코틀린에서는 void라는 키워드가 없고 Unit 이라는 키워드가 있다. 아래의 함수는 자바로 치면 void 코틀린 Unit을 반환하는 함수이다.

// 반환 타입이 없는 함수는 Unit을 반환한다. (Void)
fun printSum(num1 : Int, num2 : Int) {
    println("$num1 + $num2 = ${num1 + num2}")
}

 

Default Parameter

fun greeting(message: String = "디폴트 파라미터 셋팅!!") {
    println(message)
}

fun main() {
    greeting()
    greeting("다른 파라미터 전달!!!")
}
// 디폴트 파라미터 셋팅!!
// 다른 파라미터 전달!!!

코틀린에서는 함수를 작성할 때 파라미터 영역에 값을 미리 설정할 수 있다.

 

자바에서는 메소드의 파라미터 선언에서는 값을 설정할 수 없고 메소드 몸통 내에서 실행흐름을 갖을 때 바로 대입해주어야 했을텐데 코틀린에서는 이러한 기능을 문법적으로 제공한다.

 

Named Argument

fun log(level: String = "INFO", message: String) {
    println("[$level] $message")
}

fun main() {
    log(message = "인포 로그")
    log(level = "DEBUG", "디버그 로그")
    log("WARN", "워닝 로그")
    log(level = "ERROR", message = "에러 로그")
}
// [INFO] 인포 로그
// [DEBUG] 디버그 로그
// [WARN] 워닝 로그
// [ERROR] 에러 로그

디폴트 파라미터와 혼용된 모습인데. 우선 log라는 함수를 호출할 때, 함수의 파라미터에 값을 대입하듯 대입식을 argument로 전달할 수 있다는 모습으로 보인다. 여기서 대입식을 전달할때 함수에 쓰여진 파라미터 순서는 대입식에는 영향을 끼치지 못한다는 것이다. 

message = "에러로그" 로 전달된 named argument는 message 파라미터 변수에 할당될 뿐이지 level 변수에 영향을 끼치지는 않는다는 것이다.

 

아래를 보자.

fun log(level: String = "INFO", message: String) {
    println("[$level] $message")
}

fun main() {
    log("디버그 로그", "DEBUG")
    log(message = "디버그 로그", level = "DEBUG")
}
// [디버그 로그] DEBUG
// [DEBUG] 디버그 로그

위의 두 함수 호출 결과는 정반대로 발생한다. 전달하는 argument의 순서는 동일한것 같으나 첫번째 호출에서는 둘다 String 값이다보니 어느 변수에 정확히 할당되는지 개발자가 런타임을 확인한 후에 알 수 있었다. 

두번째 호출은 named argument를 활용하여 전달하였기 때문에 argument는 parameter에 값이 할당될 때 parameter 변수명을 보고 개발자가 의도한 대로 할당된다.

 


 

해당 게시물은 아래의 강의를 토대로 작성된 예제입니다.

https://fastcampus.co.kr/courses/211160

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr

댓글

Designed by JB FACTORY