일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- groupby
- 스터디
- 알고리즘
- 오블완
- SQL
- 프로그래머스
- CS
- Android
- select
- 정보처리기사
- 티스토리챌린지
- doitandroid
- 혼공단
- 자바
- 안드로이드스튜디오
- Kotlin
- 인프런
- join
- 카카오코테
- 혼공파
- java
- 코테
- 정처기
- MySQL
- 코틀린
- 혼공챌린지
- 자료구조
- 기술면접
- Til
- 안드로이드
- Today
- Total
Welcome! Everything is fine.
[Kotlin] 8강. 코틀린에서 함수를 다루는 방법 본문
* 인프런 강의 - 자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)을 듣고 정리한 내용입니다.
🔗 7강 내용
8강. 코틀린에서 함수를 다루는 방법
함수 선언 문법
코틀린에서는 if-else가 하나의 Expression이라고 했다. 그럼 다음과 같이 return을 앞으로 빼서 전체가 하나의 결과값이 되도록 할 수 있다.
fun max(a: Int, b: Int): Int {
return if (a > b) {
a
} else {
b
}
}
여기서 더 간단하게 만들 수 있다. 함수가 하나의 결과값이면 block 대신 = 기호를 사용할 수 있기 때문에 = 을 사용하고, 동시에 return도 뺄 수 있다. 그리고 if-else문을 한 줄로 적으면 다음과 같이 한 줄의 코드가 된다.
fun max(a: Int, b: Int) = if (a > b) a else b
defualt parameter
코틀린에서도 자바와 동일하게 오버로딩 기능이 있지만
코틀린에서는 함수 파라미터에 기본 값을 넣어줄 수 있다.
num과 useNewLine에서 자주 쓰이는 기본 값이 있다면 다음과 같이 미리 어떤 값을 넣어둘 수 있는 것이다.
fun repeat(
str: String,
num: Int = 3,
useNewLine: Boolean = true
) {
for (i in 1..num) {
if (useNewLine) {
println(str)
} else {
print(str)
}
}
}
이렇게 하면 num과 useNewLine에 값을 넣지 않더라도 3과 true가 기본 값으로 들어간다.
그런데 num은 3을 넣되, useNewLine에는 false를 넣고 싶다면 어떻게 해야할까? 물론 다음과 같이 할 수 있다.
repeat("Hello World", 3, false)
그렇지만..이왕 defualt parameter를 넣었기 때문에 3을 반복하고 싶지는 않다면 어떨까?
named argument(parameter)
그렇다면 다음과 같이 함수를 호출하는 쪽에서 어떤 파라미터에 특정 값을 넣을 것이라고 명시할 수 있다!
repeat("Hello World", useNewLine = false)
이렇게 하면 builder를 직접 만들지 않고도 builder의 장점을 가지게 된다.
다시말해 동일한 타입이 연속적으로 존재할 때 값을 헷갈리지 않고 넣을 수 있다는 것이다.
단, named argument는 코틀린에서 자바 함수를 가져다 쓸 때는 사용할 수 없다는 것에 주의해야한다.
코틀린에서 자바 코드를 쓸 때 JVM상에서 자바가 바이트 코드로 변환됐을 때 파라미터 이름을 보존하고있지 않아서 코틀린에서는 그 이름을 통해 가져오는 named argument를 사용할 수 없다.
같은 타입의 여러 파라미터 받기
자바 : 타입 ...을 쓰면 자바에서는 가변인자를 쓰는구나!라고 이해, 호출할 때는 배열을 직접 넣거나, 콤마를 이용해 여러 파라미터를 넣었다.
코틀린 : 제일 앞에 vararg를 적어줘야 한다. 호출할 때 배열을 바로 넣는 대신 앞에 스프레드 연산자(*)를 붙여줘야 한다.
fun printAll(vararg strings: String) {
for (str in strings) {
println(str)
}
}
printAll("A", "B", "C") // 콤마(,)로 구분하는 방법
val array = arrayOf("A", "B", "C") // 배열을 넣는 방법
printAll(*array) // 배열을 가변인자에 넣어 줄 때 앞에 별표
'Kotlin' 카테고리의 다른 글
[Kotlin] 코루틴과 스레드의 차이점은 무엇인가요? (0) | 2024.11.11 |
---|---|
[Kotlin] 코틀린에서 Null을 처리하는 방법은 무엇인가요? (4) | 2024.11.09 |
[Kotlin] 7강. 코틀린에서 예외를 다루는 방법 (0) | 2023.12.09 |
[intellij] 인텔리제이 프로젝트창이 보이지 않을 때 (1) | 2023.12.06 |
[Kotlin] 6강. 코틀린에서 반복문을 다루는 방법 (0) | 2023.12.06 |