본문 바로가기

kotlin

함수기본(Function)

함수기본(Function)


kotlin 에서 함수는 리턴형과 리턴하지 않는 형으로 나뉜다.

java에서 void 라는 리턴하지 않는 형태의 Unit과 return 하는 Int, Stirng, 객체 등으로 나뉜다.


fun thisIsFunction(argment : Int, parameter : Int?) : Unit {
println("hello ")
}

위의 식에서 Unit은 아무것도 리턴하지 않는 void와 유사한 형태의 함수형태이다.


Unit은 생략이 가능하다.


fun thisIsFunction(argment : Int, parameter : Int?) : Int {
return argment *3;
}

위의 식에서 Int 를 리턴하고 있는 함수 형태이다. 딱 보면 알 수 있듯이 위의 함수는 함수 바디에 return 한문장만 들어가 있다.


이를 단일 식 이라고 하며 위의 함수형태는 아래코드와 같이 축약할 수 있다.


fun thisIsFunction(argment : Int, parameter : Int?) : Int = argment *3  //단일식


또한 단일식에서는 리턴값을 추론할 수 있기때문에 아래와 같이 리턴타입또한 생략이 가능하다


fun thisIsFunction(argment : Int, parameter : Int?)  = argment *3  //단일식



또한 함수 오버로딩을 지원하기때문에 아래와 같이 파라메터수가 다르더라도 같은 네임의 함수존재가 가능하다.



fun thisIsFunction(argment : Int, parameter : Int?)  = argment *3  //단일식

fun thisIsFunction(argment : Int, parameter : Int? , type : Int) : Int{
return type
}


하지만 kotlin에서 Default value 를 지원하기때문에 함수 하나로 오버로딩을 하지않고 커버를 할 수 있다. 아래함수를 보자


fun thisIsFunction(argment : Int, parameter : Int? , type : Int = 1)  : Int{
return type
}


위의 함수에서 type파라메터는 값이 들어오지 않았을때 기본값인 1 을 초기화 해준다.



그렇다면 아래의 함수식에서 parameter를 건너뛰고 type만 내가 원하는 값으로 초기화를 해주고 싶다면


fun thisIsFunction(argment : Int, parameter : Int = 30 , type : Int = 1)  : Int{
return type
}


아래와 같이 네임드 파라메터로 지정해 줄 수도 있다.



thisIsFunction(1 , type = 31)

네임드 파라메터는 순서와 상관없이 네임을찾아서 들어간다. 아주 유용하고 kotlin스타일 이라고 할 수 있다.











'kotlin' 카테고리의 다른 글

DATA CLASS & TUPLES  (0) 2018.12.12
Function : VARIABLE ARGUMENT  (0) 2018.12.09
collection-Map  (0) 2018.12.07
For문  (0) 2018.12.06
Array  (0) 2018.12.06