기본 사용방법
class TestClass {
private val log = LoggerFactory.getLogger(javaClass)
fun testMethod() {
log.info("test log")
}
}
동작원리 파헤치기
LoggerFactory.getLogger()
public static Logger getLogger(...)
getLogger는 Logger 객체를 반환하는 static getter이다.
Logger
- 실제 Logger 인터페이스 안에 info, debug, warn과 같은 메소드들이 선언되어 있다.
public interface Logger {
public void debug(Marker marker, String msg);
public void info(String msg);
...
}
결론
- LoggerFactory.getLogger하면 Logger타입의 객체를 하나 반환한다.
- 자바로 치면 아래와 같은 형태인 것
- private Logger log = Logger.Factory.getLogger(javaClass); public void testMethod() { log.info("test"); }
interface와 companion object를 이용해서 여러 곳에서 편하게 사용하기
interface LoggerSupport {
val logger: Logger get() = LoggerFactory.getLogger(this.javaClass)
}
interface LoggerSupport {
val logger: Logger
get() {
return LoggerFactory.getLogger(this.javaClass)
}
}
사용하기
class TestClass {
companion object : LoggerSupport
fun test() : void {
try {
...
} catch (e: IOException) {
logger.warn("Rest unauthorized result write failed", e)
}
}
}
companion object로 LoggerSupport 인터페이스를 구현한다. LoggerSupport에 이미 초기화, 구현이 다되어 있어서 따로 구현할 것 없이 저렇게만 선언하면 된다.
→ LoggerSupport의 속성값인 logger를 자유롭게 사용할 수 있게 된다.
참고) 위와 같이 사용이 가능한 이유 : companion object로 interface구현
- companion object : 같은 클래스로부터 생성되는 모든 객체에서 공통적으로 쓰일 값 선언
- 아래와 같이 companion object가 특정 interface를 구현해줄 수 있다.
- → companion object가 구현한 특정 인터페이스 내의 멤버들은 현재 클래스에 선언한 것처럼 자유롭게 사용할 수 있다.
interface Person {
val name: String
fun hello()
}
class Student {
companion object : Person {
override val name: String = "juhi"
override fun hello() {
println("hello")
}
}
fun test() {
println(name)
hello()
}
}
Person 인터페이스처럼 구현해줘야 하는 메소드와 초기화해야 하는 속성값이 있을 때는 companion object를 선언할 때도 override해줘야 한다.
반응형
'kotlin' 카테고리의 다른 글
[Kotlin] parameter vs property, Constructor parameter is never used as a property (0) | 2023.01.27 |
---|---|
[Kotlin] Sequence를 이용한 컬렉션 지연 계산, 항상 효율적일까? (0) | 2022.05.10 |
[Kotlin] 문자열 공백 제거 방법 (trim, trimIndent, trimMargin) (0) | 2022.05.03 |
Kotest로 깔끔하게 Kotlin 테스트 코드 작성하기 (0) | 2022.03.31 |
[kotlin vs java ] 코틀린과 자바의 차이, 코틀린의 장점 (1) | 2022.03.31 |