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
}
반응형