본문 바로가기
언어/Kotlin

[Kotlin 공부] object와 싱글톤, object와 compaion

by 젼젼39 2024. 3. 15.

 

 

1. Kotlin에서 object를 사용하는 이유

    1) 싱글톤 패턴 구현 : 전체 생명주기에서 한 하나의 인스턴스만 존재해야하는 객체 구현
            - object 선언은 클래스 정의와 그 인스턴스 생성을 동시에 수행함

    2) 컴패니언 객체 : 클래스 안에 정적 멤버를 담는 용도. static

    3) 객체 표현식 : 익명 내부 클래스 (inner) 대체제로 사용.
            특정 인터페이스의 구현 또는 다른 클래스를 확장하는 단일 사용 객체를 간단히 선언

 

* object 선언 : 전역적으로 단일 인스턴스를 가지는 객체 정의에 사용됨 (프로그램 전반)

* object 표현식 : 주로 일시적인 익명 객체를 필요로 할 때 사용. 그 인스턴스에 다시 접근하지는 못함

 

2024.03.06 - [언어/Kotlin] - [Kotlin 문법 종합] - Single-expression function, 싱글턴 (@@질문하기)

 

[Kotlin 문법 종합] - Single-expression function, 싱글턴 (@@질문하기)

1. Single-expression function : 람다식을 이용해 메소드를 간결하게 정리 가능 * 람다식 구조 : 다른 함수의 인자로 넘김 / 함수의 결과값으로 반환 / 변수에 저장 하는 함수 {매개변수1, 매개변수2... ->

sugapowderjj.tistory.com

 

 

 

2. Object와 Companion

1) object

    - 싱글톤 패턴을 구현함
    - object로 선언된 객체는 해당 클래스의 인스턴스를 단 한 번만 생성함
    - 해당 클래스의 모든 인스턴스에서 공유됨, 어디서든 접근 가능 (static이니까)
    - 객체 생성 없이 메소드 실행 가능
    - 클래스의 내부나 외부에 정의될 수 있고, 독립적인 객체로 동작함
    - 클래스 이름이 없는 경우 -> 익명 객체

object MySingleton {
    fun doSomething() {
        println("Singleton object is doing something")
    }
}

fun main() {
    MySingleton.doSomething() // Singleton object is doing something
}

 

2) companion object

    - 클래스 내에 정의되어 클래스에 속한 정적 멤버를 정의
    - 클래스 내에서 유일한 인스턴스를 가지지만, 싱글톤과는 관련이 없음 (= 단일 인스턴스를 보장하지 않음)
            = 표현식이 사용될때마다 새로운 인스턴스가 생성됨
    - 클래스 내부에 선언되어 클래스의 인스턴스와 관련된 작업을 수행함 (ex. 객체 생성 없이 메서드 오버라이딩)

class MyClass {
    companion object {
        fun doSomething() {
            println("Companion object is doing something")
        }
    }
}

fun main() {
    MyClass.doSomething() // Companion object is doing something
}