kotlin 함수에 대한 기본
- 함수 호출
함수이름 (매개 변수를 대입)
=> 리턴타입이 있는 경우에는 함수의 호출 결과를 변수에 저장
정수 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 에서는 클래스의 기능을 확장할 수 있습니다.
자신이 만든 클래스 뿐 아니라 제공되는 클래스의 기능도 확장이 가능