728x90

Backend/Kotlin 22

[Kotlin] companion object

companion object 는 호출시 자바의 static 처럼 보일 뿐 static 은 아니다. 만약 코틀린에서 해당 자원을 호출한다면 자바의 static 자원을 사용하던 것 처럼 사용하면 되는데 만약 자바에서 호출해야 한다면 companion object 내부 자원에 @JvmStatic 를 추가로 명시해줘야 한다. 예를 들어 Enum 의 @JsonCreator 를 활용할 때가 그렇다. companion object 를 활용해서 enum class 안에 팩토리 메소드를 만들고 @JsonCreator 를 걸어주는데 @JsonCreator 는 명시적으로 static 자원이어야 하기 때문에 @JvmStatic 도 필수로 걸어줘야 한다. https://www.bsidesoft.com/8187 https://..

Backend/Kotlin 2021.11.22

[Kotlin] 초기화 없이 속성을 선언하는 방법 lateinit

일단 lateinit 키워드의 의미는 해당 속성의 초기화를 미루겠다는 의미이다. 왜 미루는데? 자바를 기준으로 생각하면 초기화를 미루고 싶으면 일단 생성자에 포함하지 않으면 되자나? 그런데 그렇더라도 초기화가 안되진 않는다. 타입별 초기값으로 자동으로 초기화될 뿐..lateinit 는 아예 이런 초기화도 미룬다는 걸 의미한다. 이런 상황이 왜 필요한지 생각을 해보자. 생성자로 초기화를 강제하진 않지만 포함하고 싶은 속성이 있을 수 있다. 자바의 경우 클래스를 만들 때 아래와 같이 타입만 지정된 속성을 만들면 된다. String str; int i; 이 경우 지정된 기본값이나 null 이 할당된 채로 객체가 생성될 것이다. 즉, 객체 생성시 자동으로 초기화가 되기 때문에 클래스를 만들때는 딱히 지정하지 않..

Backend/Kotlin 2021.11.05
728x90