코틀린은 자바와 다르게 메서드나 필드 값이 클래스안에 존재 하지 않아도 된다.
클래스 외부에 코드를 작성하게 되면 자동으로 최상위 함수로 인식된다.
하지만 JVM은 최상위 함수라는 개념이 존재하지 않는다.
따라서, 파일명을 딴 클래스를 만들어서 그 안에 정적 메서드나 필드 값을 설정하는 방법으로 구현되었다.
파일명 대신 내가 원하는 클래스로 이름을 지정하고 싶다면 package 위에 @file:JvmName("name") 을 사용하면 된다.
하지만 해당 기능은 Java 코드와 Kotlin코드가 혼용된 경우에만 사용된다.
object
코틀린의 object는 자바의 정적 클래스와 유사하다.
하지만 근본적인 차이점이 있는데 코틀린에서는 object로 구현된 코드를 싱글톤으로 관리한다.
companion object
companion object는 class내부에 정적 함수를 만들고 싶을 때 활용한다.
자바에서 정적클래스가 아닌 클래스에서 static method를 사용할때 활용한다고 생각하면된다.
하지만 이렇게 작성된 코드는 Java 코드와 혼용된 프로젝트에서 문제를 일으킨다.
내부적으로 companion object는 static method를 클래스 내부에 바로 선언하지 않고 별도의 클래스(기본값:Companion)를 만들어서 엮어두는데 Java 코드에서는 '클래스명.정적메소드()' 형태로 접근이 불가능하다.
그럴때 사용하는 것이 @JvmStatic 이다.
'Kotlin' 카테고리의 다른 글
영역 함수(scope functions) (0) | 2024.02.29 |
---|---|
수신 객체 지정 람다 (0) | 2024.02.29 |
자바에서 코틀린 컬렉션으로 (1) | 2024.02.13 |
확장함수를 사용해 직관적으로 변경하기 (0) | 2024.02.07 |
T?에 대해 (0) | 2024.02.07 |