실무 프로젝트로 배우는 Kotlin & Spring/JAVA 프로젝트에 코틀린 도입하기

JAVA에서 확장함수 사용하기

webmaster 2022. 11. 4. 23:46
728x90

Kotlin 코드

fun String.first(): Char {
    return this[0]
}

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

fun main() {
    println("ABCD".first())
    println("ABCD".addFirst('Z')) //원래 있던 함수처럼 사용 가능하다
}

JAVA 코드

public class ExtensionExample {

  public static void main(String[] args) {
    /*
     "ABCD".first();
     "ABCD".addFirst('Z'); //컴파일 오류 발생
     */
    char first = MyExtensionsKt.first("ABCD");
    System.out.println(first);

    String addFirst = MyExtensionsKt.addFirst("ABCD", 'Z');
    System.out.println(addFirst);
  }
}

디컴파일 코드

first 디컴파일 코드(자기 자신을 파라미터로 받는다)

  • 코틀린에서는 확장 함수를 사용하면, 해당 클래스에 존재했던 함수처럼 사용할 수가 있다.
    • 디컴파일을 하게 되면, 해당 코틀린 코드가 첫 번째 파라미터로 자기 자신을 받는 것을 확인할 수 있다
  • 자바에서 코틀린의 확장함수를 사용하기 위해서는 디컴파일 되었던 거처럼 첫 번째 파라미터로 확장 대상 클래스(자기 자신)를 넣어주어야 한다.
  • 현재 코드에서 코틀린에서는 기존의 String 클래스에 존재하는 인스턴스 함수처럼 사용하지만, 자바에선 static 메서드로 호출해야 한다.

 

728x90