References: Do it! 코틀린 프로그래밍

코틀린에서의 확장함수와 중위함수에 대해 알아봅니다.

 

 

1. 확장함수.

 

클래스에는 다양한 함수가 정의되어 있습니다. 이미 정의되어 있는 이런 함수들을 클래스의 멤버 메서드라고 합니다.

만약 자기가 원하는 기능을 가진 함수를 클래스에 추가시키고 싶으면 어떻게 할까요?

코틀린에선 이러한 기능을 제공해주며 이를 확장함수라고 합니다.

 

String클래스에 확장함수를 구현하면 String클래스를 쓸 때 사용할 수 있습니다.

만약 Any클래스에 확장함수를 구현해둔다면 모든 클래스에서 사용할 수도 있습니다.

 

String 변수 두개중에 더 긴값을 출력하는 함수를 사용하고자 합니다.

String클래스의 멤버메서드엔 이러한 기능흘 하는 메서드가 없어 새로 확장함수를 추가하려고 합니다.

다음 예시를 확인해봅시다.

fun String.getLongerString(target: String): String = if(this.length > target.length) this else target
fun main(){
    val s1 = "Hello kotlin!"
    val s2 = "Hello!"
    println(s1.getLongerString(s2));
}

String클래스에 getLongerString 확장함수를 추가했습니다. 실행 결과는 다음과 같습니다.

이런 확장함수를 사용하면 기존 클래스의 선언을 수정하지 않아도 쉽게 기능을 확장할 수 있습니다.

 

만약 이미 동일한 멤버함수나 메서드가 존재한다면 항상 확장함수보다 멤버 메서드가 우선적으로 호출됩니다.

 

 

2. 중위함수.

 

중위 표현법은 변수와 변수사이에 함수를 넣어 연산자 처럼 사용하는 것 입니다.

예를들어 multi라는 두 수를 곱하는 함수를 중위 함수로 만들었다면

a multi b

처럼 사용할 수 있는 함수가 중위함수입니다.

 

다음 예시로 확인해 봅시다.

infix fun Int.multi(a: Int): Int = this * a
fun main() {
    var result: Int = 2 multi 4
    println(result)
}

infix 키워드를 이용해 중위 함수를 선언하고 사용했습니다.

일반적인 함수라면 2.multi(4) 와 같은 방식으로 사용할겁니다.

 

 

 

반응형

'Programming' 카테고리의 다른 글

[Kotlin] 17. 조건문  (0) 2019.08.23
[Kotlin] 16. 꼬리 재귀 함수  (0) 2019.08.23
[Kotlin] 14. 인라인 함수  (0) 2019.08.23
[Kotlin] 13. 익명함수  (0) 2019.08.23
[Kotlin] 12. 함수 호출 방법  (0) 2019.08.22

+ Recent posts