Post

코틀린 심화4 - 확장 함수

확장 함수

코틀린에서는 확장 함수 기능을 사용하여 기존 클래스에 새로운 함수를 자유롭게 추가할 수 있다.
다만 확장함수는 코틀린 버전이 올라가면 동일한 함수가 추가될 수 있기 때문에 주의해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
fun String.first(): Char {
  return this[0]
}

fun String.addFirst(char: Char): String {
  return char + this.substring(0)
}

fun main() {
  println("ABC".first()) // A
  println("ABC".addFirst('Z')) // ZABC
}

위와 같이 String 클래스에 .first().addFirst() 확장함수를 외부에서 추가하여 사용 가능하다.

확장 함수의 사용

확장 함수는 주로 오브젝트에서 공통으로 사용하는 기능을 추가하거나 오버로딩하여 사용해야하는 경우에 사용된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class MyClass {
  fun printMessage() = println("Hello")
}

// 외부에서 printMessage 오버로딩 확장함수 추가
fun MyClass.printMessage(message: String) = println(message)

// 외부에서 null 체크 공통 확장함수 추가
fun MyClass?.printNullOrNotNull() {
  if (this == null) println("null")
  else println("not null")
}

fun main() {
  MyClass().printMessage() // 멤버 함수 출력 -> Hello
  MyClass().printMessage("Goodbye") // 오버로딩 확장 함수 출력 -> Goodbye

  var myClass: MyClass? = null
  MyClass.printNullOrNotNull() // null

  myClass = MyClass()
  MyClass.printNullOrNotNull() // not null
}
This post is licensed under CC BY 4.0 by the author.