kotlin

kotlin 함수에 대한 기본

ChloeLee 2020. 10. 13. 20:12

- 함수 호출 

함수이름 (매개 변수를 대입)

=> 리턴타입이 있는 경우에는 함수의 호출 결과를 변수에 저장

 

정수 2개를 받아서 합계를 구해서 리턴하는 함수

fun func2(Int, Int):Int

 

=>  이 함수를 사용하기 위해서는 정수 2개를 대입해야 하고 결과로 정수가 나온다. 

 

- Kotlin 함수를 만들 때 특징 

1) return 이 없으면 Unit 이라고 하는데 생략이 가능

2) 매개 변수의 값은 기본적으로 val

=> 매개 변수 값은 변경 할 수 없다.

 

함수의 내용이 한 줄이면 {} 를 생략하고 = 과 내용만 작성 가능

=> 다른 개발자가 만든 것이면 알아둬야한다. 

 

fun func2(first:Int, second:Int):Int = return first + second

 

한 줄의 코드가 return 만 하는 문장이라면 return 타입을 생략하고 return 생략 가능

fun func2(first:Int, second:Int) = first + second

이 표현 법이 가능한 이유는 코틀린에서는 함수가 일급 객체 (하나의 자료형)

그리고 함수 안에 다른 변수 함수 클래스를 추가 하는 것이 가능하다.

 

이러한 표현 법을 알아두어야 하는 이유가 있다!

안드로이드 SDK 의 이벤트 처리하는 코드가 이런식으로 많이 작성 되어 있기 때문이다.

 

Function Overloading

=> 하나의 영역에 함수의 이름은 같고 매개 변수의 개수나 자료형을 다르게 해서 2개 이상 존재 하는 경우

=> 최근에 등장한 SDK(Android , iOS)에서는 이 방식을 잘 사용하지 않는다! 

추세는 함수의 이름을 자세히 하는 것이기 때문에 실제로 보기는 힘들다는 것 ㅎ

 

-함수를 만들 때 기본값 설정이 가능

=> 매개 변수를 만들 때 = 값을 설정해주면 매개 변수가 대입 되지 않으면 자동으로 기본 값으로 설정 된다!

 

- 함수를 호출할 때 매개 변수 이름 = 값 형태로 매개 변수에 값을 설정 가능!

이렇게 하면 매개 변수의 순서를 변경해서 대입하는 것이 가능하다.. Overload 의미가 점점 없어 지는 것이다.

 

// msg 에 값이 대입 되지 않으면 noname, n의 값이 없으면 0

fun fun4(msg:String="noname", n:Int) {

    println(msg)

    println(n)

}

 

 

이 개념을 이용해 알람을 만든다면!

fun alarm(time:java.sql.Time, song:String="default.mp3",repeat:Boolean = false){

   // 알람 시간은 반드시 설정! 노래는 기본값이 있으므로 선택~ 반복도 기본 값이 있으므로 선택!

}

 

fun4(msg:"Hello", n:3)

 

// 기본 값이 있으므로 매개 변수 생략 가능

fun4()

 

//이름을 기재하면 순서를 변경해도 됩니다.

fun4(n = 3, msg = "Kotlin")

 

infix 형태가 가능

=> 이 문법은 클래스 안의 함수만 가능

=> 제공되는 클래스에 기능을 추가하기 위해서 사용

=> c#이나 kotlin, swift 에서는 클래스의 기능을 확장할 수 있습니다.

자신이 만든 클래스 뿐 아니라 제공되는 클래스의 기능도 확장이 가능