반응형
함수를 다루는 방법
함수 선언 문법
Java
public int max(int a, int b) {
if (a > b) {
return a;
}
return b;
}
Kotlin
fun max(a: Int, b: Int): Int =
if (a > b) {
a
} else {
b
}
fun maxV2(a: Int, b: Int) = if (a > b) a else b
- 함수의 문법은 Java와 다르다.
- 접근지시어 fun 함수이름(파라미터): 반환타입 {}
- body가 하나의 값으로 간주되는 경우 block을 없앨 수도 있고, block이 없다면 반환 타입을 없앨 수도 있다.
{}
를 없애고=
를 사용할 수 있다.if else
문은 Expression이기 때문에 = 으로 대치 가능한 것.
public
은 생략 가능하다.- 함수는 클래스 안에 있을수도, 파일 최상단에 있을 수도 있으며, 한 파일 안에 여러 함수들이 있을 수도 있다.
default parameters
Java
public void repeat(String str, int num, boolean useNewLine) {
for (int i = 0; i < num; i++) {
if (useNewLine) {
System.out.println(str);
} else {
System.out.print(str);
}
}
}
public void repeat(String str, int num) {
repeat(str, num, true);
}
public void repeat(String str) {
repeat(str, 3, true);
}
Kotlin
fun repeat(str: String, num: Int = 3, useNewLine: Boolean = true) {
for (i in 1..num) {
if (useNewLine) {
println(str)
} else {
print(str)
}
}
}
- 인자에
=
를 사용하면default parameter
을 지정할 수 있다. - 밖에서 파라미터를 넣어주지 않는다면 기본값을 사용한다는 개념
- 물론 코틀린은 자바와 동일하게 오버로딩이 가능하다.
named argument (parameter)
Kotlin
repeat("Hello world", useNewLine = false)
printNameAndGender(gender = "MALE", name = "heekng")
- 매개변수 이름을 통해 인자를 직접 지정할 수 있다.
- 지정되지 않은 매개변수는 기본값을 사용한다.
- builder을 직접 마들지 않고 builder의 장점을 가질 수 있다!
- 코틀린에서 자바 함수를 가져다 사용할 때는 named argument를 사용할 수 없다.
- Java 코드가 JVM 위에서 byte로 변환되는 과정에서 parameter 이름을 보존하고 있지 않기 때문에 사용이 불가능하다.
같은 타입의 여러 파라미터 받기 (가변인자)
Java
public static void printAll(String... strings) {
for (String string : strings) {
System.out.println(string);
}
}
Kotlin
fun main() {
printAll("A", "B", "C")
val array = arrayOf("A", "B", "C")
printAll(*array)
}
fun printAll(vararg strings: String) {
for (str in strings) {
println(str)
}
}
- 가변인자는
vararg
를 이용한다. printAll("A", "B", "C")
처럼 사용할 때에는 그냥 사용해도 된다.- 배열을 사용한다면
printAll(*array)
와 같이 배열명 앞에*
(spread 연산자)를 붙임으로서 사용할 수 있다.*
(spread 연산자): 배열 안에 있는 것들을 마치 그냥 , 을 쓰는 것처럼 꺼내준다.
반응형
'Java & Kotlin > Kotlin' 카테고리의 다른 글
[Kotlin] 접근제어를 다루는 방법 (0) | 2022.07.06 |
---|---|
[Kotlin] 상속을 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 클래스를 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 예외를 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 반복문을 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 조건문을 다루는 방법 (0) | 2022.07.06 |