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 싱글턴은 처음 접근 시 초기화됩니다. 초기화 순서에 의존하는 로직은 주의가 필요합니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.