Kotlin의 함수 다루기
함수 선언 문법
두 정수를 받아 더 큰 정수를 반환하는 예제
Java
1
2
3
4
5
6
public int max(int a, int b) {
if(a > b){
return a;
}
return b;
}
Kotlin으로 수정
1
2
3
4
5
6
fun max(a: Int, b: Int): Int =
if(a > b){
a
}else{
b
}
{} (block)
를 사용해서 return
값을 반환하는 대신에 =
를 사용해서 return
을 사용하지 않고 작성 가능
- 단, 하나의 값을 반환하는 경우만 가능
한 줄로 변경 가능
1
fun max(a: Int, b: Int) = if(a > b) a else b
=
을 사용하는 경우 반환 타입을 생략 가능
- 단,
{}
를 사용하는 경우라면 반환 타입이Unit
이 아닌 경우 명시적으로 작성
default parameter
주어진 문자열을 N번 출력하는 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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.println(str);
}
}
}
// 항상 true가 오는 메서드
public void repeat(String str, int num){
repeat(str, num, true);
}
// 항상 3번 반복하는 메서드
public void repeat(String str){
repeat(str, 3, true);
}
Java는 메서드를 오버로딩해서 같은 이름의 메서드를 다른 기능으로 여러개 만들 수 있다.
Kotlin으로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
// 기본 값을 지정해 줄 수 있고 기본 값이 있는 경우 메서드를 사용할 때 값을 넣지 않으면 기본 값을 사용
fun repeat(str: String,
num: Int = 5,
useNewLine: Boolean = true
){
for(i in 1..num){
if(useNewLine){
println(str)
}else {
print(str)
}
}
}
num
과 useNewLine
에 기본 값을 세팅
메서드를 사용할 때 해당 parameter
의 값을 받지 않으면 기본 값을 사용
- Kotlin도 Java와 동일하게
오버로딩
,오버로드
기능이 있음
named argument (parameter)
- 이름있는
parameter
- 장점 : builder를 직접 만들지 않고 builder의 장점을 가질 수 있다.
- 주의 사항 : Kotlin에서 Java함수를 가져다 사용하는 경우
named argument
를 사용할 수 없다.
Kotlin 예시
1
2
3
4
5
fun main(){
repeat("Hi", useNewLine = false)
}
num: Int = 5
로 기본 값이 세팅되어 있기 때문에 useNewLine
의 값만 수정해서 넣고 싶은 경우
즉, 5를 계속 써야하는데 쓰고 싶지 않다면 이렇게 named argument
를 사용하면 된다.
타입이 같아서 혼동이 있을 수 있는 경우
1
2
3
4
5
6
7
8
9
10
11
12
fun main(){
// 파라미터가 많은 경우 동일한 타입이라 혼동되는 경우 방지
printNameAndGender(gender = "남자", name = "김용준")
}
fun printNameAndGender(name: String, gender: String){
println("이름 : $name")
println("성별 : $gender")
}
이런 식으로 자리가 바뀌는 경우에도 대응할 수 있게 된다.
또한 parameter
가 많은 경우에 혼등이 올 수 있는데 이런 상황을 방지해 줌
같은 타입의 여러 parameter 받기 (가변인자)
문자열을 N개 받아 출력하는 예제
Java
1
2
3
4
5
public static void printAll(String... strings) {
for (String str : strings) {
System.out.println(str);
}
}
type...
을 사용하면 가변인자 사용
배열을 직접 넣거나, comma
를 이용해서 여러 parameter
를 넣어 준다.
1
2
3
4
String[] array = new String[]{"A", "B", "C"};
printAll(array);
printAll("A", "B", "C");
Kotlin으로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fun main(){
var array = arrayOf("A", "B", "C")
// * -> spread 연산자 : 배열안에 있는 것들은 `,`룰 쓰는 것과 같이 꺼내 온다.
printAll(*array)
}
fun printAll(vararg strings: String){
for(str in strings){
println(str)
}
}
vararg
를 같은 타입의 parameter
를 여러개 받는다고 선언 (Java의 type...
과 동일)
위와 같이 spread
연산자를 사용해서 배열에 array
에 들어 있는 값들을 ,
를 쓰는 것과 같이 꺼내 온다
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.