Kotlin

[Kotlin] Companion object(Java의 Static) 사용 방법

cob 2022. 9. 23. 09:11
자바의 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
}
반응형