minstudio

12. 싱글톤과 동반 객체 (Object & Companion Object)

코틀린은 귀찮게 싱글톤 패턴(Singleton)을 손수 짤 필요가 없습니다. class 대신 object 키워드만 사용하면, 프로그램 전역에서 단 하나만 존재하는 객체가 즉시 생성됩니다.

또한 자바의 static 멤버(클래스 레벨 변수/메서드)가 코틀린에는 없습니다. 대신 클래스 내부에 companion object를 두어 자바의 static과 완전히 동일한 역할을 하면서도 객체지향적인 유연함을 가져갑니다.

// 1. 싱글톤 선언 (object)
// DataBaseManager는 프로그램 전체에서 단 1개의 인스턴스만 보장됩니다.
object DataBaseManager {
    var isConnected = false
    fun connect() {
        isConnected = true
        println("데이터베이스에 연결되었습니다!")
    }
}

// 2. 동반 객체 (Companion Object)
class User(val name: String) {
    // 클래스 내부의 스태틱 영역 같은 곳입니다.
    companion object {
        val MAX_AGE = 120 // 공통 상수 (static final 역할)
        
        // 팩토리 메서드 (static 메서드 역할)
        fun createGuest(): User {
            return User("Guest_001")
        }
    }
}

fun main() {
    // object는 이름 그 자체로 바로 접근합니다. (생성자 호출 안함)
    DataBaseManager.connect()
    println("연결 상태: " + DataBaseManager.isConnected)

    // companion object 멤버는 클래스 이름으로 직접 접근합니다.
    println("사람의 최대 수명 한계: " + User.MAX_AGE)
    
    val guest = User.createGuest()
    println("환영합니다, " + guest.name)
}
12. 싱글톤과 동반 객체 (Object & Companion Object) | Minstudio