코틀린 객체(Object)와 동반 객체(Companion Object)
코틀린의 object는 싱글톤 객체를 쉽게 생성할 수 있게 해준다.
또한 companion object를 사용하면 자바의 static 멤버처럼 클래스 내부에서 공유 데이터를 다룰 수 있다.
object 기본 개념
object는 프로그램 전체에서 단 하나의 인스턴스만 존재하는 객체를 정의한다.
즉, 별도의 new 생성 없이 바로 사용할 수 있다.
사용 예시
object는 싱글톤
object로 선언된 객체는 항상 단 하나의 인스턴스만 유지된다.
object 표현식 (익명 객체)
object를 식(expression)으로 사용하면 익명 클래스(Anonymous Class) 를 간단히 만들 수 있다.
object 표현식 + 인터페이스 구현
익명 객체는 인터페이스나 클래스를 상속해 임시 구현체를 만들 때 유용하다.
companion object (동반 객체)
클래스 내부에 companion object를 선언하면,
해당 클래스의 모든 인스턴스가 공유하는 정적 멤버처럼 동작한다.
자바의 static 키워드를 대체하는 기능이다.
사용 예시
companion object 이름 지정
companion object는 이름을 지정할 수도 있고, 생략해도 된다.
companion object와 상수
상수를 정의할 때는 const val을 사용한다.
이는 런타임이 아닌 컴파일 시점에 값이 결정된다.
companion object 확장 함수
클래스 외부에서 companion object에도 확장 함수를 추가할 수 있다.
object 선언과 companion object 비교
| 구분 | 키워드 | 인스턴스 수 | 사용 위치 | 특징 |
|---|---|---|---|---|
object |
단독 | 1개 (싱글톤) | 클래스 밖 | 전역 객체 |
companion object |
클래스 내부 | 1개 (클래스 공유) | 클래스 안 | static 대체 기능 |
object + interface = 객체 선언 구현체
object 선언은 인터페이스를 즉시 구현한 싱글톤 형태로도 사용 가능하다.
object 상속
object도 open 클래스를 상속하거나 인터페이스를 구현할 수 있다.
object의 초기화
객체 선언 시 즉시 초기화 블록(init)을 사용할 수 있다.
활용 예시
-
Logger / Config / DatabaseManager 같은 전역 단일 인스턴스 관리
-
Factory 패턴 구현 (Companion Object 활용)
-
Event Listener 임시 구현 (object 표현식)
-
정적 상수 관리 클래스 (const + companion object 조합)

답글 남기기