본문 바로가기

Android

Extension functions(확장 함수)

728x90

확장함수란, 마치 클래스에 정의된 함수인 것처럼 새로운 기능을 추가하는 기능입니다.

함수를 최상위 수준 또는 다른 클래스의 밖에 위치시킴으로써 함수들을 다른 패키지에서도 import를 통해 사용할 수 있도록 할 수 있습니다.

 

예제를 먼저 확인해보겠습니다.

fun String?.isJsonObject():Boolean {
    return this?.startsWith("{") == true && this.endsWith("}")
    // 위와 같으면 true 아니면 false
}
fun String?.isJsonArray():Boolean {
    return this?.startsWith("[") == true && this.endsWith("]")
}
when {
	message.isJsonObject() -> {
    		...
   	}
    
    	message.isJsonArray() -> {
    		...
  	}
}

 

 

위 확장함수에 대한 설명 전에 예제 코드가 먼저 보이지만 설명이 없어도 이해가 어렵진 않습니다. 즉, 아래와 같은 룰에 따라 확장 함수를 만들 수 있게 되는데, 위 코드에선 확장할 클래스(수신 객체 타입)가 String인 this(수신 객체)에 startsWith(), endsWith()를 통해 문자열이 JsonObject인지 JsonArray인지 형태를 확인하는 함수를 만들었다는 것을 알 수 있습니다.

fun 확장할 클래스.함수명: 리턴타입 {
   return 리턴값
}