Kotlin Academy · 강의

object 선언: Kotlin 싱글턴

object로 싱글턴을 만들고 그 생명주기를 이해해 보세요.

레슨 1/413개 단계

object 선언: Kotlin 싱글턴은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

싱글턴으로 사용하는 object

object 선언은 한 줄의 코드로 하나의 인스턴스, 즉 스레드 안전하며 지연 초기화되는 싱글턴을 생성합니다.

싱글턴 선언하기

object Name { ... }을 사용하여 상태와 메서드를 가진 싱글턴을 선언하십시오.

object Logger {
    fun log(msg: String) = println("[LOG] $msg")
}
fun main() {
    Logger.log("App started")
    Logger.log("User signed in")
}

싱글턴 상태

싱글턴은 변경 가능한 상태를 보유할 수 있으며, 어디서든 접근하고 전역적으로 공유할 수 있습니다.

object Counter {
    var count = 0
    fun increment() { count++ }
}
fun main() {
    Counter.increment()
    Counter.increment()
    Counter.increment()
    println(Counter.count) // 3
}

지연 초기화

단일 인스턴스는 처음 접근할 때 생성되며 그보다 일찍 생성되지 않습니다. JVM은 이 과정이 스레드 안전하도록 보장합니다.

object Heavy {
    init { println("Initializing Heavy...") }
    fun work() = "done"
}
fun main() {
    println("Before access")
    println(Heavy.work()) // triggers init now
    println(Heavy.work()) // no init again
}

인터페이스 구현하기

싱글턴은 인터페이스를 구현할 수 있으므로 콜백과 전략에 유용합니다.

interface Greeter { fun greet(name: String): String }
object EnglishGreeter : Greeter {
    override fun greet(name: String) = "Hello, $name!"
}
fun main() {
    println(EnglishGreeter.greet("Ada"))
}

클래스 확장하기

객체는 open 클래스도 상속할 수 있습니다.

open class Animal(val sound: String) {
    fun makeSound() = "The animal says $sound"
}
object Cat : Animal("Meow")
fun main() {
    println(Cat.makeSound())
}

실용적인 사용: 구성

싱글턴은 시작 후 변경되지 않는 앱 전체 구성에 적합합니다.

object AppConfig {
    val apiUrl = "https://api.example.com"
    val timeout = 5000
    val version = "1.0.0"
}
fun main() {
    println("v${AppConfig.version} -> ${AppConfig.apiUrl}")
}

실용적인 사용: 유틸리티 함수

관련된 상태 없는 도우미를 object 안에 네임스페이스가 있는 정적 메서드와 비슷한 형태로 묶으십시오.

object StringUtils {
    fun reverse(s: String) = s.reversed()
    fun capitalize(s: String) = s.replaceFirstChar { it.uppercase() }
}
fun main() {
    println(StringUtils.reverse("Kotlin"))
    println(StringUtils.capitalize("hello"))
}

동등성과 동일성

인스턴스가 하나뿐이므로 같은 객체 참조에 대해서는 ===가 항상 true를 반환합니다.

object MySingleton
fun main() {
    val a = MySingleton
    val b = MySingleton
    println(a === b) // true
}

object와 클래스 비교

일반 class는 인스턴스화해야 합니다. object 자체가 인스턴스이므로 생성자를 호출하지 않습니다.

class Service { fun ping() = "pong (class)" }
object SingletonService { fun ping() = "pong (object)" }
fun main() {
    val s = Service() // instance per call
    println(s.ping())
    println(SingletonService.ping()) // no instantiation
}

스레드 안전성

싱글턴 인스턴스 생성은 JVM의 클래스 로딩 보장에 따라 스레드 안전합니다. 내부에 추가하는 변경 가능한 상태의 안전성은 개발자의 책임입니다.

object SharedCounter {
    @Volatile var count = 0
    @Synchronized fun inc() { count++ }
}
fun main() {
    repeat(1000) { SharedCounter.inc() }
    println(SharedCounter.count) // 1000
}

빠른 확인

Kotlin의 object 선언에는 인스턴스가 몇 개 존재합니까?

복습

object Name { ... }은 상태, 메서드, 인터페이스 및 상속을 지원하는 스레드 안전 지연 싱글턴을 선언합니다. 구성, 유틸리티 그룹 및 상태 없는 서비스에는 object를 사용하십시오.

무료로 시작

AI 튜터와 함께 Kotlin을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
51
레슨
203

자주 묻는 질문

“object 선언: Kotlin 싱글턴” 강의는 무료인가요?

네 — “object 선언: Kotlin 싱글턴” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“object 선언: Kotlin 싱글턴”에서 뭘 배우나요?

object로 싱글턴을 만들고 그 생명주기를 이해해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“object 선언: Kotlin 싱글턴” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. object 선언: Kotlin 싱글턴
  2. companion object: Kotlin의 정적 멤버와 유사한 요소
  3. 익명 객체와 객체 식
  4. companion object를 사용한 팩토리 메서드
← Kotlin Academy(으)로 돌아가기