코틀린 함수에 대해서 정리합니다.

  • default 지정 함수 및 변수 지정
  • 변수 순서 변경
  • Infix notation


default 지정 함수 및 변수 지정

default 지정을 통해 초깃값을 지정할 수 있습니다.

fun setUserInfo(name: String = "Name", email: String, phone: String = "000-0000-0000") {
	this.name = name
	this.email = email
	this.phone = phone
}

위와 같이 초깃값을 지정할 수 있습니다.

setUserInfo를 사용할 때 다음과 같이 지정하면 오류가 발생합니다.

setUserInfo("Email")

kotlin_error_01

초깃값을 지정할 수 있지만, 위와 같이 자동으로 순서 보장이 일어나지 않습니다.

그래서 아래와 같이 지정할 수 있습니다.

setUserInfo("Name") // Error
setUserInfo("Name", "email") // 정상
setUserInfo("Name", "email", "Phone") // 정상

위와 같습니다. 1 번째 줄은 사용이 불가능합니다.

그래서 다음과 같은 문법을 통해서 해결할 수 있습니다.

setUserInfo(email = "email")

이렇게 지정하면 email 변수에만 값을 지정하고, 나머지는 default 값으로 처리함을 나타냅니다.


변수 순서 변경

위와 같이 default로 값을 처리하고, email = "email" 형태로 값을 지정할 수 있습니다.

그래서 좀 더 유용한 방법도 있습니다.

변수가 추가되었을 때를 대비해서 다음과 같은 방법으로 코딩을 하게 되어 나중에 좀 더 편할 수 있습니다.

setUserInfo(
	phone = "000-0000-000",
	email = "email@email.com",
	name = "User Name")

위와 같은 형태로 변수를 호출할 수 있습니다.

변수 명을 앞에 주고, 값을 입력하는 방식을 사용할 수 있어, 변수 순서를 맘대로 지정할 수 있습니다.

setUserInfo(
	email = "email@email.com",
	name = "User Name")


Infix notation

이전 글에서 간단하게 Infix notation을 다루었습니다.

몇 가지 추가로 정리합니다.

Infix notation은 다음과 같이 사용합니다.

fun AppCompatActivity.replaceContentFragment(@IdRes frameId: Int, fragment: android.support.v4.app.Fragment) {
    supportFragmentManager.beginTransaction().replace(frameId, fragment)?.commit()
}

AppCompatActivity를 상속받거나, AppCompatActivity 변수를 통해서 replaceContentFragment을 사용하게 됩니다.

좀 더 쉬운 걸로 이야기하면

fun Int.sum(y: Int) = this + y

이 경우도 역시 Int를 상속받는 클래스이거나, Int 변수를 통해서 접근할 수 있습니다.

이를 Java에서 사용하게 되면, sum(1, 2)라고 사용하게 됩니다.

kotlin에서는 당연히 null을 허용하지 않으므로, java에서는 @NotNull이어야 합니다.


Infix notation에서 default 사용하기

위에서 정리했던 2가지를 모두 포함할 수 있습니다.

fun Int.sum(y: Int = 0, z: Int) = this + y + z

호출 시에는 다음과 같이 합니다.

15.sum(z = 15) // 15 + 0 + 15 = 30
15.sum(y = 5, z = 3) // 15 + 5 + 3 = 23


마무리

함수 사용에 대해서 추가로 정리해 보았습니다.

default를 통해서 값을 정할 수 있는데 변수의 순서도 변경하면서 값을 사용할 수도 있습니다.

그런 부분을 정리해보았습니다.

감사합니다.


kotlin 관련 글 더 보기


Tae-hwan

Android, Kotlin .. Create a content development.