PHpullh
학습 라이브러리/Kotlin/object & companion object

KOTLIN · 객체지향

object & companion object

싱글턴 패턴과 정적 멤버를 Kotlin다운 방식으로 구현합니다.

객체지향중급objectcompanionsingletonfactory@JvmStatic

핵심 설명

싱글턴 패턴과 정적 멤버를 Kotlin다운 방식으로 구현합니다.

Kotlin code

// object — 싱글턴
object AppConfig {
    val version = "1.0.0"
    var debugMode = false

    fun log(msg: String) {
        if (debugMode) println("[DEBUG] $msg")
    }
}

// companion object — 클래스의 정적 영역
class User private constructor(
    val id: Int,
    val name: String
) {
    companion object {
        private var nextId = 1

        // 팩토리 함수 (생성자 대신)
        fun create(name: String) = User(nextId++, name)

        // @JvmStatic — Java에서 정적 메서드로 보임
        @JvmStatic
        fun fromId(id: Int): User? = null  // DB 조회 가정
    }
}

// object expression — 익명 객체
val comparator = object : Comparator<String> {
    override fun compare(a: String, b: String) =
        a.length.compareTo(b.length)
}

fun main() {
    AppConfig.debugMode = true
    AppConfig.log("앱 시작")           // [DEBUG] 앱 시작

    val u1 = User.create("Alice")
    val u2 = User.create("Bob")
    println("${u1.id}: ${u1.name}")   // 1: Alice
    println("${u2.id}: ${u2.name}")   // 2: Bob
}

학습 팁

companion object는 인터페이스를 구현하거나 확장 함수를 받을 수 있습니다. 팩토리 패턴 구현에 자주 사용됩니다.

주의할 점

object 싱글턴은 처음 접근 시 초기화됩니다. 초기화 순서에 의존하는 로직은 주의가 필요합니다.

자주 묻는 질문

object & companion object란 무엇인가요?

싱글턴 패턴과 정적 멤버를 Kotlin다운 방식으로 구현합니다.

object & companion object 학습 시 주의할 점은 무엇인가요?

object 싱글턴은 처음 접근 시 초기화됩니다. 초기화 순서에 의존하는 로직은 주의가 필요합니다.