본문 바로가기

언어/Kotlin

[Kotlin] Object(객체)와 companion object(동반객체)

이번 포스팅에서는 다 알고있다고 여기지만, 헷갈리기 쉬운 object와 companion object에 대해 포스팅해보겠습니다.

 

companion object는 쉽게 말하면 static접근을 위한 object입니다. 

static 접근은, 클래스 안의 변수를 사용하기 위해서는 인스턴스를 생성해야 하는데 미리 메모리에 올려 놓아,클래스 안의 변수를 인스턴스 생성 없이 바로 사용가능하게 도와줍니다.


아주 예시를 들어보자면, 

위 class는 companion object이고, 아래 class는 object입니다. 위의 class를 호출해서 쓰이는데 어떻게 달라질까요?

 

다음과 같이 class object는 에러가 발생합니다. 

위와 같이 사용해야 에러가 발생하지 않습니다.

 

그이유는 왜일까요?

 

코틀린 에서는 , 자바와 달리 어떤 클래스를 Object로 선언했을 때 이 클래스는 애초에 하나의 인스턴스를 제공하는 

싱글톤 클래스가 됩니다.

 

참조) 싱글톤 클래스(패턴)란, 소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. (출처 위키백과)

쉽게 말해 , 한번에 하나의 객체(Instance)만 가질 수 있는 클래스입니다.

 

그리고 thread-safe방식으로 처음 액세스할 때 생성되는 인스턴스는 클래스와 동일한 이름을 갖습니다.

 

 

하지만 이와달리, 만약 클래스 인스턴스없이 어떤 클래스 내부에 접근하고 싶다면,

클래스 내부에 객체를 선언할 때 companion 식별자를 붙인 object를 선언하면 된다.

이름을 생략할 수 있고, 생략하게 되면 이름의 기본값은 Companion이 된다.

 

 

즉, 정리하자면

Object는 클래스 전체가 하나의 인스턴스로 선언되는 것이라면,

Companion Object는 클래스 내에 일부분을 싱글톤 객체로 가지고 싶을 때 사용합니다.

또한, 클래스는 하나의 Companion Object만 가질 수 있습니다.

'언어 > Kotlin' 카테고리의 다른 글

[Kotlin] 기본 문법 및 개념 때려잡기 (1)  (0) 2021.02.05