object : 단일 인스턴스를 관리하거나 특정한 동작을 수행할 때 사용
companion object : 클래스 내에서 정적으로 동작하는 메서드나 변수를 제공할 때 사용
Object
사용 사례
- 싱글톤 패턴을 구현할 때 사용됩니다. 클래스의 단일 인스턴스를 생성하고 해당 인스턴스를 여러 곳에서 접근할 수 있습니다.
- 객체 생성이 필요 없는 유틸리티 메서드를 제공할 때 사용됩니다.
- 이름이 있는 객체를 정의하여 특정한 동작을 수행하고자 할 때 사용됩니다.
특징
- 클래스 내부에 정의되며, 해당 클래스의 인스턴스가 단 하나만 존재합니다.
- 싱글톤으로 동작하며, 클래스의 인스턴스 생성 없이 사용됩니다.
- 멤버 변수와 메서드를 가질 수 있습니다.
사용 예시
object Singleton {
var count: Int = 0
fun printCount() {
println("Count: $count")
}
}
fun main() {
Singleton.count += 1
Singleton.printCount() // 출력: Count: 1
}
위의 예시에서 Singleton은 object로 선언되어 있으므로, 이를 통해 생성된 Singleton 인스턴스는 프로그램 내에서 유일합니다. Singleton.count를 통해 접근하는 count 변수는 프로그램의 어느 곳에서든 같은 값을 가리킵니다.
Companion Object
사용 사례
- 클래스 내부에서 정적 메서드와 변수를 제공할 때 사용됩니다.
- 팩토리 메서드를 구현하여 객체 생성 로직을 캡슐화할 때 사용됩니다.
- 인터페이스의 메서드를 구현할 때 사용됩니다.
- 테스트 용이성을 위해 의존성 주입을 피할 때 사용됩니다.
특징
- 클래스 내부에 정의되며, 해당 클래스의 인스턴스와 연결됩니다.
- 클래스의 인스턴스 생성 없이 사용할 수 있습니다.
- 멤버 변수와 메서드를 가질 수 있으며, 외부에서 접근할 때는 클래스 이름을 통해 접근합니다.
사용 예시
class MyClass {
companion object {
val staticProperty: Int = 123
fun staticMethod() {
println("This is a static method.")
}
}
}
fun main() {
println(MyClass.staticProperty) // 출력: 123
MyClass.staticMethod() // 출력: This is a static method.
}
위 예시에서 MyClass 안에 정의된 companion object는 staticProperty와 staticMethod를 포함하고 있습니다. 이들은 클래스의 인스턴스를 생성하지 않고도 MyClass.staticProperty와 MyClass.staticMethod()를 통해 접근할 수 있습니다.
차이점
- 생성 방식
- object : 클래스 내부에 직접 정의
- companion object : 클래스 내부에 정의되나 해당 클래스의 인스턴스와 연결
- 사용 목적
- object : 주로 싱글톤 객체를 만들거나 이름이 있는 객체를 정의할 때 사용
- companion object : 클래스 내부에서 정적 메서드나 변수를 제공하거나 인터페이스의 메서드를 구현할 때 사용
- 접근 방법
- object: 객체의 이름을 통해 접근
- companion object: 클래스 이름을 통해 접근
- 개수 제한
- object: 클래스 내에 여러 개의 object를 정의
- companion object: 클래스 내에는 하나의 companion object만 정의
'Kotlin' 카테고리의 다른 글
[Kotlin] StateFlow: Android 상태 관리를 위한 필수 도구 (1) | 2024.11.15 |
---|---|
[Kotlin] 언더스코어(_)를 변수 이름에 붙이는 이유 (1) | 2024.09.03 |
[Kotlin] Coroutine Suspend function (0) | 2024.03.25 |
[Kotlin] Data class, Sealed class (0) | 2024.03.06 |
[Kotlin] Scope functions(let, run, with, apply, also) (0) | 2024.03.05 |