728x90
JvmStatic을 이용해 정적 함수 호출하기
Kotlin의 동반 객체, 싱글톤 객체의 메서드
class HelloClass {
//동반 객체
companion object {
@JvmStatic
fun hello() = "hello!"
}
}
//싱글톤 객체
object HiObject {
@JvmStatic
fun hi() = "hi!"
}
fun main() {
val hello = HelloClass.hello()
val hi = HiObject.hi()
}
JAVA에서 사용하기
public class JvmStaticExample {
public static void main(String[] args) {
//String hello = HelloClass.Companion.hello();
//String hi = HiObject.INSTANCE.hi();//객체를 생성하는 INSTANCE를 사용해서 생성후 사용해야한다,
//@JvmStatic을 사용하게 되면, 자바에서 static 메서드를 호출하듯이 호출할 수 있다
HelloClass.hello();
HiObject.hi();
}
}
- 동반 객체와 object 키워드로 정의한 싱글톤 객체에서 정의된 함수를 코틀린에서 사용하면, JAVA의 static과 유사하게 사용할 수 있다.
- JAVA에서 이를 사용하기 위해서는 클래스.Companion.메서드(), 클래스. INSTANCE. 메서드()를 통해서 접근해야 한다.
- 동반 객체는 static inner class, 싱글톤 객체는 JAVA의 싱글톤 객체(매번 값을 생성하는 것이 아닌 INSTANCE에 값을 저장해서 쓴다)로 변환되기 때문이다.
- @JvmStatic 애노테이션을 사용하면, Kotlin에서 사용하는 것처럼 Companion, INSTANCE 키워드를 매번 붙이지 않고, 바로 프로퍼티에 접근해서 사용할 수 있다.
JvmField로 정적 프로퍼티 호출하기
Kotlin의 동반 객체, 싱글톤 객체의 프로퍼티
class JvmFieldClass {
companion object {
@JvmField
val id = 1234
const val CODE = 1234
}
}
object JvmFieldObject {
@JvmField
val name = "tony"
const val FAMILY_NAME = "stark"
}
fun main() {
val id = JvmFieldClass.id //클래스 지시자로 접근 가능
val name = JvmFieldObject.name
}
JAVA에서 사용하기
public class JvmFieldExample {
public static void main(String[] args) {
//int id = JvmFieldClass.Companion.getId();
//String name = JvmFieldObject.INSTANCE.getName(); //중간에 Companion, INSTANCE 를통해 접근해야한다.
int code = JvmFieldClass.CODE; //상수는 바로 접근 가능
String familyName = JvmFieldObject.FAMILY_NAME;
int id = JvmFieldClass.id; //@JvmField 애노테이션이 있으면 직접 접근이 가능하다
String name = JvmFieldObject.name;
}
}
- Kotlin은 기본적으로 static 프로퍼티를 지원하지 않는다.
- 동반 객체와 object 키워드로 정의된 싱글톤 객체를 사용하면 static 프로퍼티와 유사하게 사용할 수 있다.
- JAVA에서 이를 호출할 경우 마찬가지로 Companion, INSTANCE 키워드를 매번 써야 한다.
- const 키워드를 사용한 상수는 JAVA static 프로퍼티처럼 사용이 가능하다
- @JvmField를 사용하면, 상수가 아닌 경우에도 JAVA의 static 프로퍼티처럼 사용이 가능하다.
728x90
'실무 프로젝트로 배우는 Kotlin & Spring > JAVA 프로젝트에 코틀린 도입하기' 카테고리의 다른 글
| JAVA 기반 스프링 프로젝트에 코틀린 적용 (0) | 2022.11.05 |
|---|---|
| 코틀린과 롬복 (0) | 2022.11.05 |
| JAVA에서 확장함수 사용하기 (0) | 2022.11.04 |
| Kotlin의 예외처리와 JAVA 예약어 접근 방법 (0) | 2022.10.23 |
| Getter, Setter 호출하기 (0) | 2022.10.23 |