728x90
함수 선언 문법
- 함수 구조
- [접근 지시어] [함수를 의미하는 키워드] [함수 이름] [함수의 매개변수] [함수의 반환 타입]
- 접근 지시어: public은 생략 가능
- 함수를 의미하는 키워드: fun
- 함수의 매개변수: [매개변수명: 타입]
- [접근 지시어] [함수를 의미하는 키워드] [함수 이름] [함수의 매개변수] [함수의 반환 타입]
- 함수가 하나의 결과값이면 block 대신 = 사용이 가능하다.
- 이를 한줄로 변경이 가능하다.
- = 을 사용하는 경우에는 반환 타입 생략이 가능하다.
- block { } 을 사용하는 경우에는 반환 타입이 Unit이 아니면, 명시적으로 작성해줘야 한다.
// 1. 함수 선언 문법 - 두 정수를 받아서 더 큰 정수를 반환
fun max(a: Int, b: Int) = if (a > b) a else b
- 함수의 위치
- 클래스 안
- 파일 최상단
- 한 파일 안에 여러 함수들이 있을 수 있음
default parameter
- 자바의 오버로딩 기능
- 밖에서 파라미터를 넣어주지 않으면 기본값을 사용한다.
// 2. 주어진 문자열을 N번 출력 - 오버로딩 -> default parameter
fun repeat(str: String, num: Int = 3, useNewLine: Boolean = true) {
for (i in 1..num) {
if (useNewLine) {
println(str)
} else {
print(str)
}
}
}
named argument (parameter)
- repeat를 호출할 때, num은 3을 그대로쓰고, useNewLine은 false를 쓰고싶을 때
- 매개변수 이름을 통해서 직접 지정한다.
- 지정되지 않은 매개변수는 기본값을 사용한다.
- builder를 직접 만들지 않고 builder의 장점을 가지게 된다.
repeat("안녕하세요", useNewLine = false)
// 안녕하세요안녕하세요안녕하세요
- 코틀린에서 자바 함수를 가져다 사용할 때는 named argument를 사용할 수 없다.
val java = Lec08Main()
java.repeat("안녕하세요")
같은 타입의 여러 파라미터 받기 (가변인자)
- 사용시
- 배열을 직접 넣거나, comma를 이용하여 여러 파라미터를 넣어준다.
- 배열을 바로 넣는 대신, 스프레드 연산자를 붙여주어야 한다.
// 4. 같은 타입의 여러 파라미터 받기 (가변인자)
val arr = arrayOf("A", "B", "C")
java.printAll(*arr)
java.printAll("A", "B", "C")
printAll(*arr)
printAll("A", "B", "C")
- 선언시
- 자바의 ...을 타입 뒤에 쓰는 대신에 제일 앞에 vararg를 적어준다.
// 4. 가변인자
fun printAll(vararg strings: String) {
for (str in strings) {
println(str)
}
}
728x90