[Kotlin] Object & Companion Object

mingsso·2023년 7월 2일
0

Java-Kotlin

목록 보기
15/17

1️⃣ Object

클래스를 정의하면서 동시에 인스턴스를 정의하며, object + 선언식/표현식 형태로 사용할 수 있음

object + 선언식

싱글톤 패턴 형태로 만들어줌

싱글톤 패턴 : 인스턴스를 한 개만 생성되게 하는 패턴
주로 프로그램 내에서 하나로 공유해야 하는 객체가 존재할 때, 해당 객체를 싱글톤으로 구현하여 모든 유저/프로그램들이 해당 객체를 공유하며 사용할 때 씀

object Singleton : MyClass(), MyInterface {
	
    val name: String = "MyName"
    
    override fun MyClassFunc() { ... }
}

val singleton = Singleton

println(Singleton.name)
Singleton.MyClassFunc()

object + 표현식

익명 객체로서 사용 가능함

fun main() {
	val user = object {
    	val name = "MyName"
        val age = 28
    }
    
    println(user.name)
    println(user.age)
}



2️⃣ Compainon Object

코틀린 언어는 자바의 static을 지원하지 않음

그 대신 코틀린에서는 클래스 바깥에 선언하는 최상위 함수와 객체 선언을 활용함
대부분의 경우에는 최상위 함수를 사용하는 것을 권장하지만, 최상위 함수는 private 멤버에 접근할 수 없다는 단점

class MyClass {
    private val name: String = "MyName"

    fun publicMember(): String {
        return "Public"
    }
}

fun topLevelFunction(myClass: MyClass): String {
    val public = myClass.publicMember()
    
    // private 멤버 접근 불가능 
    // val private = myClass.name
    
    return public
}

대신, 클래스 안에 companion object를 정의하고 그 안에 클래스의 프로퍼티나 메소드를 선언한다면, 자바의 static 호출 사용 구문과 동일하게 외부에서 접근할 수 있음

class MyClass {
    private val name: String = "MyName"

    fun publicMember(): String {
        return "Public"
    }

    companion object {
        fun accessPrivateMember(myClass: MyClass): String {
            return myClass.name
        }
    }
}

fun main() {
    val myClass = MyClass()
    
    // Companion object를 통해 private 멤버에 접근할 수 있음
    println(MyClass.accessPrivateMember(myClass))
}






참고자료

https://velog.io/@seongwon97/싱글톤Singleton-패턴이란
https://parade621.tistory.com/37

profile
🐥👩‍💻💰

0개의 댓글