object 선언: Kotlin 싱글턴
object로 싱글턴을 만들고 그 생명주기를 이해해 보세요.
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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- object 선언: Kotlin 싱글턴
- companion object: Kotlin의 정적 멤버와 유사한 요소
- 익명 객체와 객체 식
- companion object를 사용한 팩토리 메서드