BackEnd/Kotlin
8강. 코틀린에서 함수를 다루는 방법
hanseom
2024. 2. 21. 20:00
반응형
- 함수 선언 문법
- default parameter
- named argument
- 같은 타입의 여러 파라미터 받기 (가변인자)
함수 선언 문법
다음은 두 정수를 받아 더 큰 정수를 반환하는 Java 코드입니다.
public int max(int a, int b) {
if (a > b) {
return a;
}
return b;
}
Kotlin으로 작성하면 다음과 같습니다.
fun max(a: Int, b: Int): Int {
return if (a > b) {
a
} else {
b
}
}
- 접근 지시어, public은 생략 가능합니다.
- fun: 함수를 의미하는 키워드입니다.
- max: 함수 이름입니다.
- (a: Int, b: Int): 함수의 파라미터는 파라미터명: 타입 입니다.
- : Int: 함수의 반환 타입입니다. (Unit인 경우 생략 가능합니다.)
함수가 하나의 결과값이면 block { } 대신 = 사용이 가능합니다.
fun max(a: Int, b: Int): Int =
// if - else는 expression
if (a > b) {
a
} else {
b
}
위의 코드는 한 줄로 변경도 가능합니다.
fun max(a: Int, b: Int): Int = if (a > b) a else b
default parameter
default parameter는 파라미터의 기본값을 지정할 때 사용합니다.
다음은 주어진 문자열을 N번 출력하는 Java 코드 입니다.
public void repeat(String str, int num, boolean useNewLine) {
for (int i = 1; i <= num; i++) {
if (useNewLine) {
System.out.println(str);
} else {
System.out.print(str);
}
}
}
useNewLine 이나 num 의 기본 값을 주고 싶은 경우, Java에서는 다음과 같이 오버로딩으로 구현해야 합니다.
public void repeat(String str, int num) {
repeat(str, num, true);
}
public void repeat(String str) {
repeat(str, 3, true);
}
Kotlin 에서는 다음과 같이 default parameter를 지정할 수 있습니다. 물론 Kotlin에도 Java와 동일하게 오버로딩 기능은 있습니다.
fun repeat(
str: String,
num: Int = 3,
useNewLine: Boolean = true
) {
for (i in 1..num) {
if (useNewLine) {
println(str)
} else {
print(str)
}
}
}
named argument
named argument는 다음 코드와 같이, 파라미터의 이름을 지정하여 함수를 호출할 때 사용합니다. 파라미터가 많은 함수가 존재할 때 값을 넣어 줄 파라미터는 named argument를 사용하고, 지정되지 않은 파라미터는 기본 값을 사용합니다.
fun main() {
repeat("hello", useNewLine = false)
}
named argument는 builder의 장점을 가집니다. 단, Kotlin에서 Java 함수를 가져다 사용할 때는 named argument를 사용할 수 없습니다.
같은 타입의 여러 파라미터 받기 (가변인자)
다음은 문자열을 N개 받아 출력하는 Java 코드입니다.
public static void main(String[] args) {
String[] array = new String[]{"A", "B", "C"};
printAll(array);
printAll("A", "B", "C");
}
public static void printAll(String... strings) {
for (String str : strings) {
System.out.println(str);
}
}
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)
}
}
- Kotlin에서 가변인자 파라미터를 만들어 줄 때 ... 대신 vararg을 사용합니다.
- Kotlin에서 배열을 가변인자에 넣어줄 때는 별표(*)를 붙여줘야 합니다. 별표(*)는 spread 연산자로 배열 안에 있는 것들을 콤마(,)를 쓰는 것처럼 꺼내주는 역할을 합니다.
감사합니다.
반응형