프로그래밍 언어/코틀린

코틀린 25. 오브젝트

닉네임못짓는사람 2021. 1. 7. 19:42
반응형

이번 글에서는 오브젝트에 대해서 알아보도록 하겠습니다.

오브젝트


우리가 배웠던 '클래스'는 실체가 아닌 실체를 만들기 위한 '틀'이기 때문에

이를 사용하기 위해서는 실체인 '객체'를 만들어서 사용해야 했습니다.

 

때문에 하나의 클래스에 여러 개의 객체가 존재할 수 있고, 객체들은 서로 독립적이라고 알아봤었습니다.

그런데, 이렇게 여러 개의 객체가 아닌 하나의 객체만 사용할 때는 오브젝트를 선언하여 사용하는 방법을 쓸 수 있습니다.

fun main() {
    println(A.num)
    A.exF()
}

object A{
    var num = 10
    fun exF(){
        println("오브젝트의 함수")
    }
}

오브젝트는 객체를 생성하지 않기 때문에 오브젝트명을 참조하여 멤버에 접근합니다.

위의 코드에선 A라는 오브젝트명을 참조해서 num변수와 exF함수를 사용한 것을 볼 수 있습니다.

오브젝트는 맨 처음 호출할 때 객체를 생성하기 때문에. 위에서는 A.num을 사용할 때 메모리에 생성됩니다.

Companion object


오브젝트는 이렇게 사용하는 방법 외에도 기존의 클래스 내에 블럭을 만들어

사용하는 방법이 있는데, 이를 companion object라고 합니다.

fun main() {
    var ob1 = A()
    ob1.exF()
    println(A.num)
    println(A.Companion.str)
}

class A(){
    companion object{
        var num = 10
        var str = "string"
    }
    fun exF(){
        println("클래스함수")
    }
}

사용법은 클래스 내부에 companion object라는 키워드를 적고, 중괄호 안에 오브젝트를 구현해주시면 됩니다.

또한 외부 함수에서 이에 접근할 때에는 클래스명을 참조해서 접근하거나, 클래스명과 Companion키워드를 사용하여 접근할 수 있습니다.

 

companion object에는 이름을 지어줄 수도 있으며, 이 경우 Companion키워드 대신 이 이름으로 호출이 가능합니다.

companion object myObj{
        var num = 10
        var str = "string"
    }
   

companion object는 자바를 배우신 분들이라면 static과 비슷한 개념이라고 생각하시면 됩니다.

하지만 companion object는 본질적으론 객체이니 실제로는 static과 다르다고 할 수 있겠네요.

또한 이 companion object는 클래스 내에 하나밖에 선언하지 못합니다.

 

이번 글은 이 정도로 마치도록 하겠습니다.

감사합니다.

반응형