Kotlin의 모든 클래스에서 logger 객체를 편하게 얻을 수 있는 방법
안녕하세요, 하마연구소 입니다. Java에서 프로그래밍 할 때 편의를 위하여 Lombok 을 거의 필수로 이용합니다. 보통 클래스변수의 getter()와 setter()를 자동으로 생성해주는 @Data 어노테이션을 붙이는 것을 많이 사용합니다. 그리고 @Log, @Slf4j 등 logger 객체를 쉽게 얻을 수 있는 기능을 제공하는데, 꽤 유용합니다. 코드가 많이 간단해집니다. Kotlin으로 프로그래밍하면서 이와 같은 logger 객체를 쉽게 얻어주는 라이브러리를 찾아보았지만, 찾지 못했습니다. 최근 Kotlin 버전에서는 Lombok을 공식적으로 사용할 수 있게 되었습니다. (https://kotlinlang.org/docs/lombok.html) 하지만 아직(현재버전 1.5.21) @Log, @Log4j2, @Slf4j 등의 어노테이션은 지원을 하지 않습니다. 아래는 순수하게 Kotlin 코딩으로 간단하게 logger 객체를 얻을 수 있는 방법입니다. Inline function 으로 모든 객체에서 접근가능하도록 정의하였고, reified 키워드를 사용하여 런타임시에도 해당 객체에서 generic type에 접근할 수 있도록 하였습니다. 1 2 3 4 5 6 7 import org.slf4j.Logger import org.slf4j.LoggerFactory /** * 모든 Kotlin 클래스에서 SLF4J의 Logger 객체를 얻을 수 있다. */ inline fun T. logger (): Logger { return LoggerFactory.getLogger(T :: class.java) } Log4j2 객체가 필요하다면 function의 반환값과 구현부분을 살짝 변경하면 되겠죠? 혹시 이 방법말고 또다른 기똥찬 방법 알고 계시면 답글 부탁드립니다. 감사합니다.