반응형
안녕하세요
K-IN 입니다.
코틀린에 대해서 알아보겠습니다.
전체 강의 목록은 아래의 링크를 클릭해주세요.
companion object 란?
컴패니언 객체는 클래스 내에 정의되어 클래스 자체에 속하는 멤버를 가질 수 있는 특별한 객체입니다.
정적 멤버와 유사한 역할을 하지만 더욱 유연하고 확장 가능한 기능을 제공합니다.
아래의 에시는 companion object 를 통해서 myConstant 속성과 myFunction 함수를 정의한 뒤 인스턴스를 생성하지 않고 호출하는 예시입니다.
class MyClass {
companion object {
const val myConstant = 42
fun myFunction() {
println("Calling myFunction in companion object")
}
}
}
// 클래스 이름을 통해 직접 접근
println(MyClass.myConstant) // 42
MyClass.myFunction() // Calling myFunction in companion object
컴패니언 객체(companion object)의 활용, 로깅을 위한 로거를 정의
정적 멤버와 유사하지만 더욱 유연한 기능을 하는 컴패니언 객체는 어디에서 활용할 수 있을까요?
가장 대표적인 예시로는 로거를 구현해서 사용하는 패턴일 것입니다.
컴패니언 객체를 통해서 정의된 log 변수는 정적 변수처럼 외부에서 클래스를 통해서 호출될 뿐만 아니라
override 된 process 함수 내에서도 자유롭게 사용할 수 있습니다.
즉, 여러 메서드에서 공통적으로 호출/참조되거나 클래스 외부에서 인스턴스화 없이 호출/참조할 때 활용하기 좋습니다. (로깅은 매우 좋은 예시입니다.)
package com.kin.batchexample
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.batch.item.ItemProcessor
import java.util.*
class PersonItemProcessor : ItemProcessor<Person, Person> {
companion object {
private val log: Logger = LoggerFactory.getLogger(PersonItemProcessor::class.java)
}
override fun process(person: Person): Person {
val firstName = person.firstName.uppercase(Locale.getDefault())
val lastName = person.lastName.uppercase(Locale.getDefault())
val transformedPerson = Person(firstName, lastName)
log.info("Converting ($person) into ($transformedPerson)")
return transformedPerson
}
}
이상입니다.
K-IN 올림.
반응형
'프로그래밍 > 코틀린' 카테고리의 다른 글
코틀린, let 확장 함수을 알아보자 (75) | 2024.03.13 |
---|---|
코틀린, data 키워드와 데이터 클래스 (4) | 2024.03.07 |
K017. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트8, 람다(Lambdas) 3 (79) | 2024.03.07 |
K016. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트7, 람다(Lambdas) 2 (85) | 2024.03.05 |
K015. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트6, 람다(Lambdas) 1 (109) | 2024.02.16 |