자바의 Static 대신에 사용 정적인 메서드, 변수를 사용할 때 선언
기본적으로 하는 일은 private로 선언된 프로퍼티나 메서드를 읽어 올 수 있다.
1. Java의 Static과의 차이점
- Companion Object는 객체로 변수에 할당할 수 없다.
- 하나의 클래스에서는 하나의 Companion Object만 생성할 수 있다.
- Companion Object 내부의 변수는 클래스 안에서 사용할 수 있다. 그러나 클래스 멤버 변수는 Companion Object 안에서 사용할 수 없습니다. Companion Object는 클래스 로딩하면서 생성되지만, 클래스 멤버 변수는 클래스 인스턴스를 생성할 때 생성되기 때문에 멤버 변수를 사용할 수 없습니다.
2. 사용 방법
//private를 사용하여 다른 곳에서는 만들지 못하게 함
class Book private constructor(val id : Int, val name : String) {
companion object{
val myBook ="new book"
fun create() = Book(0, myBook)
}
}
fun main() {
//create 객체 생성
val book = Book.Companion.create() //companion 생략 가능 Book.create()
println("${book.id}, ${book.name}") // 출력 => 0, new book
}
3. 인터페이스 구현 활용 방법
class Book private constructor(val id : Int, val name : String) {
companion object BookFactory : IdProvider {
//상속 받으면 오버라이드 필요
override fun getId() : Int {
return 444
}
val myBook ="new book"
fun create() = Book(getId(), myBook)
}
}
interface IdProvider {
fun getId() : Int
}
fun main() {
val book = Book.create()
val bookId = Book.BookFactory.getId() //BookFactory 생략 가능
println("${bookId}") // 출력 => 444
println("${book.id}, ${book.name}") // 출력 => 444, new book
}
반응형
'Kotlin' 카테고리의 다른 글
[Kotlin] 범위형(for) / 조건형(while) 반복분 (0) | 2022.09.27 |
---|---|
[Kotlin] 안드로이드 스튜디오 Guideline (반응형 UI) 사용 방법 (0) | 2022.09.26 |
[Kotlin] Lamda(람다) 사용 방법 (0) | 2022.09.21 |
[Kotlin] Map & Set 사용 방법 (0) | 2022.09.20 |
[Kotlin] Intent (화면 전환) 사용 방법 (1) | 2022.09.19 |