computer_study

[Kotlin] 12. 자바 상호 운용성 본문

스터디/코틀린 완벽 가이드

[Kotlin] 12. 자바 상호 운용성

knowable 2022. 6. 8. 23:23

12.1 자바 코드를 코틀린에서 사용하기

12.1.1 자바 메서드와 필드

  • 자바 메서드를 아무 문제 없이 코틀린 함수처럼 노출시킬 수 있다.
  • 뉘양스 차이는 유의해야 한다.

12.1.2 Unit과 void

  • 자바에서 void를 반환하면 코틀린에선 Unit을 반환하는 함수로 본다

12.1.3 합성 프로퍼티

  • 코틀린에선 자바의 게터나 세터를 일반적인 코틀린 프로퍼티처럼 쓸 수 있게 합성 프로퍼티를 노출시켜준다.
    • 게터는 파라미터가 없는 메서드. 메서드 이름이 get으로 시작해야 한다.
    • 세터는 파라미터가 하나만 있는 메서드. 메서드 이름이 set으로 시작해야 한다.
  • Person class에 getAge()가 있다면 코틀린에선 person.age와 같은 식으로 쓸 수 있다.

12.1.4 플랫폼 타입

  • 코틀린은 자바 코드로부터 비롯된 객체는 플랫폼 타입으로 분류한다.
  • 이 값은 null이 될 수도 있다.
  • 이를 함수에서 반환하면 플랫폼 타입이 전파되기도 한다.

12.1.5 널 가능성 애터테이션

  • 젯브레인즈의 @Nullable과 @NotNull
  • 안드로이드 SDK의 여러가지 @Nullable과 @NotNull
  • @Nonnull등의 JSR-350 널 가능성 애너테이션

12.1.6 자바/코틀린 타입 매핑

자바타입 코틀린 타입
byte/Byte Byte
short/Short Short
int/Integer Int
long/Long Long
char/Character Char
float/Float Float
double/Double Double

12.1.7 단일 추상 메서드 인터페이스

  • 단일 추상 메서드(추상 메서드가 하나뿐인 자바 인터페이스)는 코틀린 함수 타입처럼 작동한다.

12.1.8 자바를 코틀린으로 변환하는 변환기 사용하기

  • 일텔리J플러그인을 통해 자바 소스파일을 코틀린 코드로 변환할 수 있다
  • Code > Convert Java File to Kotlin File 액션

12.2 코틀린코드를 자바에서 사용하기

12.2.1 프로퍼티 접근

  • 코틀린 프로퍼티를 자바에서 직접 접근할 수는 없다.
  • 자바 클라이언트는 일반적인 메서드와 마찬가지 방법으로 접근자 메서드를 통해 접근할 수 있다.
    • 게터는 파라미터가 없는 메서드. 이름은 프로퍼티 이름 첫 글자를 대문자로 변경 후 앞에 get이 붙는다
    • 세터는 파라미터를 하나만 받는 메서드. 이름은 프로퍼티 이름 첫 글자를 대문자로 변경 후 앞에 set이 붙는다.

12.2.2 파일 퍼사드 최상위 선언

  • 자바는 모든 메서드는 어떤 클래스에 속해야 하기 때문에, 코틀린 컴파일러는 최상위 함수와 프로퍼티를 자동으로 생성된 파일 퍼사이드라는 클래스에 넣는다.

12.2.3 객체와 정적 멤버

  • JVN에서 코틀린 객체 선언은 정적인 INSTANCE필드가 있는 일반적인 클래스로 컴파일 된다.
// kotlin 코드
object Application{
    val name = "My Application"
    fun exit(){}
}

// java에서 접근
public class Main{
    System.out.println(Application.Instance.getName());
}

12.2.4 노출된 선언 이름 변경하기

  • @JvmName 애너테이션을 통해 함수나 프로퍼티 접근자 이름을 변경할 수 있다.
  • 코틀린에서는 올바른 선언이나, 자바에서는 금지된 선언이 되는 시그니처 충동을 막기 위해 사용
@JvmName("visit")
fun goto(person: Person){
    ...
}

// goto 대신 visit로 접근 가능

12.2.5 오버로딩한 메서드 생성하기

  • 코틀린에서 @JvmOverloads 애노테이션을 제공
  • @JvmOverloads를 적용하면 원래 코틀린 함수 외에 오버로딩된 함수를 추가로 생성한다.
  • @JvmOverloads애너테이션에 의해 생성되는 오버로딩된 함수들은 자바와 상호 운용을 목적으로 만들어졌기에, 코틀린에서 해당 함수를 호출할 수 없다.

12.2.6 예외 선언하기

  • 코틀린은 예외 유형과 무관하게 던지면 되지만, 자바에서는 명시적으로 외부로 던져지는 예외 목록을 함수에 추가해야 한다.
  • @Throws 애너테이션을 사용해 예외클래스 지정 가능
@Throws(IOException::class)
fun loadData() = File("data.txt").readLines()

12.2.7 인라인 함수

  • 자바에는 인라인 함수가 없기에, inline이 붙어있다면 일반 메서드로 노출된다.
  • 메서드를 호출할 수는 있지만, 인라인 함수의 본문이 자바 코드로 인라인 되지는 않는다.

12.2.8 타입 별명

  • 타입 별명은 자바에서 사용할 수 없다.
  • 자바에선 모두 원래의 타입을 가리키는 것으로 보인다.

 

 

Comments