※ 함수의 정의
함수는 fun 키워드로 시작합니다.
※ main 함수
- main 함수는 프로그램의 시작점입니다. 프로그램을 실행하면 메모리로 로드된 프로그램에서 main 함수를 찾아서 실행합니다.
- 매개변수 args는 문자열 배열로 명령행에서 실행 프로그램명 뒤에 따라오는 인자들을 받아들입니다.
fun main(args : Array<String>) {
/* ... */
}
// 명령행 인자를 받지 않는 형태도 가능합니다.
fun main() {
/* ... */
}
- 매개변수는 함수내로 값을 보내기 위해 사용됩니다. 여러개의 매개 변수가 콤마(,)로 분리되어 사용될 수 있습니다. 매개 변수가 없을 수도 있습니다.
- 함수가 값을 반환하면 반환 타입을 지정해 줘야 합니다.
- 값의 반환은 return 문 뒤에 값 또는 값으로 평가되는 표현식을 사용할 수 있습니다.
fun 함수명(매개변수): 반환 타입 {
return 값 또는 표현식
}
fun plus(x: Int, y: Int): Int {
return x + y
}
- 반환값이 없는 함수를 만들때는 반환 타입 부분을 비워두던가 Unit 타입을 반환하도록 지정합니다. 둘은 동등합니다.
- 반환값이 없으므로 뒤에 아무것도 오지 않는 return 문을 쓰던가 아무것도 쓰지 않아도 됩니다. 반환하는 return을 쓰는 경우는 주로 어떤 조건에 따라 일찍 반환하거나 할때 사용됩니다.
fun 함수명(매개변수) {
}
func 함수명(매개변수): Unit {
return
}
fun printX(x: Int) {
println(x)
}
fun printX(x: Int): Unit {
println(x)
return
}
- 함수가 반환하지 않을 경우 Nothing을 반환 타입으로 지정할 수 있습니다.
// 함수내에 무한루프이므로 반환하지 않는 경우 입니다.
fun run(): Nothing {
while(true) {
/* ... */
}
}
// 함수가 예외를 던지므로 반환하지 않습니다.
fun fail(msg: String): Nothing {
throw NotImplementedError(msg);
}
※ 매개변수
- 매개변수는 함수에 데이터를 보내는 방법 입니다. 매개변수는 없을수도 있고, 여러개가 될 수도 있습니다.
- 매개변수가 여러개일 경우에는 콤마(,)로 분리합니다.
- 매개변수 리스트에 트레일링 콤마(Trailing comma)를 지원합니다. 트레일링 콤마는 마지막 매개변수의 끝에도 콤마를 쓸 수 있는 것입니다. 이를 사용하므로 코드를 작성할때 매개변수의 순서를 바꾸거나 마지막에 매개변수를 추가할때 콤마를 추가하거나 삭제해야하는 불편함이 없으므로 편리하게 코드를 작성할 수 있습니다.
fun plus(
a: Int,
b: Int,
c: Int, // trailing comma
): Int {
return a + b + c
}
- 매개변수에 기본값을 줄 수 있습니다.
fun plus(x: Int = 0, y: Int = 0): Int {
println("x : " + x)
println("y : " + y)
return x + y
}
// x, y 모두 기본값이 사용됩니다.
var z: Int = plus()
// y에 기본값이 사용됩니다.
var z: Int = plus(1)
// 파라미터 이름을 사용하여 x는 기본값을 주고, y에는 주어진 값이 사용됩니다.
var z: Int = plus(y = 2)
- vararg 지시자를 사용하여 매개변수의 갯수를 동적으로 줄 수 있습니다.
// 동적변수를 받아 모두 더합니다.
fun plus(vararg param: Int): Int {
var total: Int = 0
for(p in param) {
total += p
}
return total
}
var z: Int = plus(1, 2, 3, 4, 5)
※ 단일 표현식 함수(Single-expression functions)
- 함수가 하나의 표현식을 반환한다면 함수 본체를 나타내는 중괄호를 생략하고 등호(=) 뒤에 표현식을 쓸 수 있습니다.
// 하나의 표현식을 반환하므로 중괄호 생략하고 등호(=) 뒤에 반환하는 표현식 바로 사용.
fun plus(x: Int, y: Int): Int = x + y
// 반환값을 명시적으로 지정하지 않아도 컴파일러에 의해 추론되어질 수 있습니다.
fun plus(x: Int, y: Int) = x + y
var z: Int = plus(1, 2)
※ 함수 범위
- 함수는 파일내에 최상위 레벨에 정의 되어질 수 있습니다.
- 함수는 객체 내부에 정의될 수 있습니다. 이를 멤버 함수라고 합니다.
- 함수는 함수내부에 정의될 수 있습니다. 이름 로컬 함수 라고 합니다.
// 최상위 레벨에 정의된 main 함수로 프로그램의 시작점입니다.
fun main(args: Array<String>) {
println( plus(1, 2) )
printHello("하하);
// 클래스 생성 및 멤버함수 호출
var car = Car()
car.footBreak()
}
// 파일의 최상위 레벨에 정의된 함수 입니다.
fun plus(x: Int, y: Int): Int {
return x + y
}
// 클래스를 정의 합니다.
class Car {
// 함수내에 정의 된 멤버 함수 입니다.
fun bootBreak() {
println("브레이크")
}
}
// 함수내부에 로컬 함수를 가지는 경우 입니다.
fun printHello(name: String): Unit {
print("안녕, ")
fun printName(): Unit {
println(name);
}
printName();
}
'프로그래밍 > Kotlin' 카테고리의 다른 글
Kotlin - 고차 함수(High-order function), 함수 타입(function type), 람다(lambda), 익명함수(anonymous function) (0) | 2021.08.15 |
---|---|
Eclipse와 Android Studio 에서 Kotlin 버전 확인 방법 (0) | 2021.08.01 |
Kotlin - 변수, 상수, Non-null, Nullable (1) | 2021.07.24 |
전자정부표준프레임워크 3.10에 Kotlin 플러그인 설치오류 및 OpenJDK 16 설치하기 (0) | 2021.07.24 |
Kotlin - 클래스와 상속 (0) | 2019.08.15 |