Effective Kotlin - infix를 활용한 확장 함수, 톱레벨 함수란?

JINHO LEE·2024년 7월 1일
0

아이템 12: 연산자 오버로드를 할 때는 의미에 맞게사용하라에서 나온 용어

Infix 함수란?

Infix 함수는 코틀린에서 제공하는 특수한 형태의 함수로, 함수 호출 시 점(.)과 괄호(())를 생략하고 중위 표기법으로 호출할 수 있다.
infix 함수는 두 개의 요소를 연결하여 자연스러운 언어 구문처럼 사용할 수 있게 해준다.

Infix 함수 정의

infix 함수는 다음과 같은 조건을 만족해야 한다.

  1. 멤버 함수이거나 확장 함수여야 한다.
  2. 하나의 매개변수를 가져야 한다.
  3. infix 키워드로 정의되어야 한다.
infix fun String.concatWith(space: String): String {
    return this + space
}

fun main() {
    val result = "Hello" concatWith "World"
    println(result)  // "HelloWorld" 출력
}

위 예제에서 concatWith 함수는 infix로 정의된 확장 함수로, "Hello" concatWith "World" 형태로 호출할 수 있다.

확장 함수란?

확장 함수는 기존 클래스에 새로운 함수를 추가하는 기능을 제공한다. 그래서 클래스를 직접 수정하지 않고도 그 클래스의 인스턴스에서 사용할 수 있는 함수를 정의할 수 있다.
이를 통해 라이브러리나 프레임워크의 코드를 수정하지 않고도 기능을 확장할 수 있게 된다.

확장 함수 정의

fun String.isPalindrome(): Boolean {
    return this == this.reversed()
}

fun main() {
    val word = "madam"
    println(word.isPalindrome())  // true 출력
}

위 예제에서 isPalindrome 함수는 String 클래스에 대한 확장 함수로, String 객체에서 isPalindrome 함수를 호출할 수 있게 해준다.

톱레벨 함수란?

톱레벨 함수(top-level function)는 클래스나 객체 내부에 정의되지 않고 파일의 최상위 수준에 정의된 함수를 말한다. 톱레벨 함수는 객체 지향 프로그래밍의 메서드와 달리 정적(static) 함수처럼 동작한다.

톱레벨 함수 정의

// 파일 최상위 수준에 정의된 톱레벨 함수
fun greet(name: String) {
    println("Hello, $name!")
}

fun main() {
    greet("Alice")  // "Hello, Alice!" 출력
}

위 예제에서 greet 함수는 파일의 최상위 수준에 정의된 톱레벨 함수이다. 클래스나 객체에 속하지 않고 독립적으로 정의되어 있어, 해당 파일 내 어디서나 호출할 수 있다.

0개의 댓글