티스토리 뷰

Server

Kotlin의 함수(Function)

니용 2020. 6. 26. 11:50
반응형

Author: 니용

 


이전에 Java를 사용하면서 대표적으로 많이 사용하였던 것이 바로 함수(메서드)였습니다.

Kotlin에서도 Java보다 더 쉽게 함수를 사용할 수 있습니다.

보통 Java는 public class ClassName을 선언하고 그 아래에 사용을 했어야 했는데요, Kotlin은 class 선언이 따로 필요 없이 사용이 가능합니다.

 

이전 글에서도 보시다시피 프로젝트를 실행시키는 메인 함수가 class 선언 없이 3줄 내로 끝났었습니다.

 

fun main(args: Array<String>) {
    println("Say Hello")
}

함수는 fun 키워드로 정의합니다.

함수가 있다면 파라미터도 존재하는데 파라미터를 선언하는 형태는 Java와 약간 다릅니다.

 

기본적인 타입과 선언에 대한 내용은 여기서 자세히 기술하였습니다.

 

 

Java Style: 접근제어자 (static) 변수타입 변수명

public String methodName(String param) {
    return param + "result";
}

private void methodVoid() {
    ...
}

protected Object get(Map<String,Object> map, String key){
    return map.get(key);
}

 

Kotlin Style: (접근제어자) 변수명: 변수타입

(public) fun methodName(param: String) : String {
    return param + "result"
}

private fun methodVoid(): Unit {
    ...
}

fun get(map: Map<String,Any>, key: String) : Any? {
    return map[key]
}

위 두 개의 코드는 같은 코드를 샘플로 둔 것입니다. 차이가 확실히 보이시죠?

Kotlin에서는 기본적으로 접근제어자를 public을 지정하기 때문에 public 접근제어자를 설정하지 않아도 됩니다.

private는 지원을 하지만, protected는 지원하지 않습니다.

 

두 번째로 특이한 것은, void 대신에 Unit이라는 클래스를 사용합니다. (Void 클래스도 존재합니다.)

Unit은 생략 가능하고 이와 같이 쓸 수도 있습니다.

private fun methodVoid() {
    ...
}

 

세 번째로 Object 타입을 Any로 변경해서 사용 가능합니다.

마지막으로는 3번째 함수에서 표시된 Any?인데요 '?'가 의미하는 바는 Nullable입니다. 

이는 다른 글에서 다뤄보겠습니다.

 


축약형 함수와 추론

두 번째로 살펴볼 점은 축약형 함수가 가능하다는 것입니다.

fun sum(a: Int, b:Int): Int {
    return a+b
}

int값 두 개를 받아 더해주는 함수인데요, 이를 축약하면 간편해집니다.

fun sum(a: Int, b:Int) = a+b

함수의 몸체가 표현식(Expression)인 경우 return이 생략됩니다. 이러한 경우 return type은 int 타입으로 추론됩니다.

축약형은 밑에 적은 것과 같이 조건식이 붙은 경우 더 유용하게 쓸 수 있습니다.

// 기존 함수
fun maxOf(a: Int, b: Int): Int {
    if(a>b) {
         return a
    } else {
         return b
    }
}

// 축약형
fun maxOf(a: Int, b: Int) = if(a>b) a else b

 

반응형

'Server' 카테고리의 다른 글

Kotlin의 생성자와 data class  (0) 2020.06.29
Kotlin의 Any와 Nullable (1)  (0) 2020.06.29
Kotlin의 Control Flow  (0) 2020.06.26
[Spring] @Bean과 @Component의 차이  (0) 2020.06.25
Kotlin 변수의 Wrapper Type  (0) 2020.06.25
Kotlin 설치법  (0) 2020.06.24
댓글
공지사항