728x90
반응형
companion obejct
java의 static과 같은 문법으로 "클랙스 안의 정적 멤버"를 만들 때 사용한다.
kotlin에서는 java의 static 대신 companion object를 사용하는 것이다.
즉, 객체를 만들지 않고도 사용할 수 있는 변수나 메서드를 만들 수 있다는 것이다.
간단한 예제
class MyClass {
companion object {
fun sayHello() {
println("안녕!")
}
}
}
위 예제에서 companion obejct로 선언 된 함수 호출은
아래와 같이 사용할 수 있다.
MyClass.sayHello() // 결과: 안녕!
comapnoin object 사용되는 경우
| 상황 | 예시 |
| 클래스 외부에서 바로 호출하고 싶을 때 | CalendarFragment.newInstance(2025, 6) |
| 상수를 만들 때 | const vala TAG = "MyLog" |
| 객체를 하나만 만들고 싶은 때(싱글턴) | object 와 함께 사용 |
companoin object VS static
| 항목 | static | companion object |
| 목적 | 클래스에 속한 정적 멤버 만들기 | 클래스에 속한 정적 멤버처럼 사용 |
| 키워드 | static | companion object |
| 접근방식 | ClassName.memberName | ClassName.memberName |
| 인스턴스 없이 사용가능 여부 | ✅ | ✅ |
| 클래스당 하나만 존재 | ✅ | ✅(하나의 companion object만 가질 수 있다. |
| 상수 선언 | public static final int MAX = 100 | const val MAX = 100 (top-level or companion) |
| 함수 선언 | public static void print() | fun print() inside companion object |
| 내부 객체 생성 가능 여부 | ❌ (static은 정적 공간) | ✅ (companion object는 내부 객체임) |
| 바이트 코드 변환 시 | 진짜 static 함수로 변환됨 | 내부 static class + INSTANCE로 변환됨 |
| 기타 특징 | 간단하고 빠름 | 더 객체지향적이고 유연함 |
728x90
반응형
'개발 > kotlin' 카테고리의 다른 글
| [kotlin] 로또번호 랜덤 생성기 - 3 (Activity 작업) (3) | 2025.05.29 |
|---|---|
| [Kotlin] 로또번호 랜덤 생성기 - 2 (Layout 파일 생성) (1) | 2025.05.13 |
| [Kotlin] Data Class (0) | 2025.04.18 |
| [Kotlin] 코틀린에서 뷰 바인딩(View Binding) (0) | 2025.03.27 |
| [Kotlin] tools:ignore="UselessParent" (0) | 2025.02.03 |