함수를 작성할 때 기본 값을 지정하고,
함수를 호출할 때 인자의 이름을 지정할 수 있다.
우리는 함수를 작성할 때 파라미터를 함께 넣어서 함수를 호출하는 경우가 많은데,
지금까지의 예제들은 파라미터가 많지 않았지만 많아진다면 각 파라미터가 어떤것을 의미하는지 이해하기 쉽지 않을 것이다.
이를 위해 이름 붙은 인자를 사용하면 코드의 가독성이 좋아지는데 이름 붙은 인자와 디폴트 인자가 어떻게 쓰이는지 알아보자!
[ 이름 붙은 인자 ]
함수 호출 시 해당 인자가 의미하는 것이 무엇인지 이름을 붙이는 것
import atomictest.eq
fun color(red:Int, green:Int, blue:Int) =
"($red, $green, $blue)"
fun main(){
color(1, 2, 3) eq "(1, 2, 3") // 이름을 붙이지 않음
// 이름 붙은 인자
color(red = 76, green= 89, blue = 0) eq "(76, 89, 0)"
color(52, 34, blue = 0) eq "(52, 34, 0)"
color(green = 70, blue = 0, red = 80) eq "(80, 70, 0)"
}
- 모든 인자에 이름을 붙일 경우 모든 인자의 의미가 명확해지지만, 모든 인자에 이름을 붙이지 않아도 됨
- 인자에 이름을 붙일 경우 인자의 순서를 변경 가능하지만, 순서를 변경했다면 나머지 인자에도 이름을 붙여 사용해야 함 (컴파일러가 이름이 생략된 인자들의 위치를 알아내지 못할 수 있기 때문)
[ 디폴트 인자 ]
파라미터의 디폴트 값을 함수 정의 시 지정하는 것
import atomictest.eq
fun color(red:Int = 0, green:Int = 0, blue:Int = 0) =
"($red, $green, $blue)"
fun main(){
color(1, 3) eq "(1, 3, 0") // 이름을 붙이지 않음
// 이름 붙은 인자
color(green= 89) eq "(0, 89, 0)"
color(blue = 10, green = 70) eq "(0, 70, 10)"
}
- 값을 지정하지 않은 인자의 경우 자동으로 디폴트 값으로 지정되며, 이 경우 코드를 짧고 더 가독성 있게 작성할 수 있음
[ 덧붙은 콤마 ]
import atomictest.eq
fun color(red:Int = 0, green:Int = 0, blue:Int = 0,) =
"($red, $green, $blue)"
- 마지막 파라미터 뒤에 콤마를 추가로 붙인 것을 의미
- 파라미터 값을 여러 줄에 걸쳐 작성하는 경우 유용
- 덧붙은 콤마가 존재할 경우 콤마를 추가하거나 빼지 않아도 새로운 아이템을 추가하거나 순서를 변경할 수 있음
[ joinToString() ]
- 이터레이션이 가능한 객체(리스트, 집합, 범위 등)의 내용을 String으로 합침
- 원소 사이에 들어갈 문자열(구분자 : separator), 맨 앞에 붙일 문자열(접두사 : prefix), 맨 뒤에 붙일 문자열(접미사 : postfix) 지정 가능하며, 각 디폴트 값은 separator = ", " / prefix, postfix = ""(빈 문자열)로 지정되어 있음
import atomictest.eq
fun main(){
val list = listOf(1,2,3)
list.toString() eq "[1, 2, 3]"
list.joinToString() eq "1, 2, 3"
list.joinToString("!", "(", ")") eq "(1!2!3)" // 이름 없는 인자는 헷갈릴 수 있기 때문에 아래와 같이 나타냄
list.joinToString(separator = "!", prefix "(", postfix = ")") eq "(1!2!3)"
}
[ trimMargin() ]
- 여러 줄 String 형식을 맞춰주는 표준 라이브러리 함수
- 각 줄의 시작 부분을 인식하기 위한 경계를 표현하는 접두사 String을 파라미터로 받아 사용(디폴트 값은 파이프 | )
- 소스 String의 각 줄 맨 앞에 있는 공백들 다음에 지정한 접두사 String까지를 잘라내서 문자열을 다듬어줌
- 여러 줄 문자열의 첫 번째 줄과 마지막 줄에 공백으로만 이뤄진 줄을 제거
import atomictest.eq
fun main() {
val poem = """
|-> Last night I saw upon the stair
|ー> A little man who wasn't there
|-> He wasn't there again today
|->Oh, how I wish he'd go away."""
poem.trimMargin() eq
"""->Last night I saw upon the stair
->A little man who wasn't there
->He wasn't there again today
->0h, how I wish he'd go away."""
poem.trimMargin(marginPrefix = " |->") eq
"""Last night I saw upon the stair
A little man who wasn't there
He wasn't there again today
Oh, how I wish he'd go away."""
}
[ 오늘의 학습 소감 ]
오늘은 크게 이름 있는 인자, 디폴트 인자에 대해서 학습을 하는 아톰이었다. 내용이 크게 어렵지 않고 이해하기 쉬운 아톰이었지만 덧붙은 콤마, 함수 등 새롭게 나온 내용이 있어서 이해가 어려운 부분이 존재하기도 했던 아톰이었다. 하지만 그만큼 유용하고 쓰임이 많은 내용이었기에 이번 학습이 추후 어떻게 사용될지 기대가 되는 파트이기도 하다.
'공부 자료 > 코틀린[Kotlin]' 카테고리의 다른 글
[Atomic 33] When 식 (1) | 2024.02.06 |
---|---|
[Atomic 32] 오버로딩 (feat. overloading) (1) | 2024.02.05 |
[Atomic 30] Extension function (feat. 확장 함수) (7) | 2024.02.01 |
[Atomic 28] 프로퍼티 접근자(feat. getter / setter) (0) | 2024.01.30 |
[Atomic 27] 맵 (feat. Map) (1) | 2024.01.28 |