Kotlin static 이용 Companion Object

Notepad96

·

2020. 10. 3. 23:21

300x250

 

 

 

 

 

1. static 역할 - Companion Object


기존 Java에서 사용하였던 static은 Kotlin에서는 존재하지 않는다.

하지만 Companion Object를 사용한다면 static 역할을 해낼 수 있다.

 

 

여기서 중요한 점은 static의 역할을 할 수 있다는 것이지 static인것은 아니다.

 

 

class Book private constructor(var name: String)
{   
    companion object
    {
        var count: Int = 0
        	private set
        
        fun create(name:String) : Book {
            count++
            return Book(name)
        }
        
        fun print() = println("$count")
    }
}
fun main() {
    Book.print()
    var book: Book = Book.create("name1")
    println(book.name)
    Book.print()
    var book2: Book = Book.create("name2")
    println(book2.name)
    Book.print()
}

 

main을 보면 "클래스 이름.함수명()"으로 마치 static 함수처럼 호출하고 있다. 

 

 

Book 클래스의 생성자를 private로 제한하여 Book 클래스 외부에서는 인스턴스를 생성할 수 없다.

 

따라서 create라는 static함수로 클래스 내부에서 인스턴스를 만들어 리턴해주도록 만들었다.

 

그리고 인스턴스를 생성할 때마다 static변수인 count를 1씩 증가시키도록 하였다.

 

 

 

 

 


2. Java와의 호환성

class Numb {
    companion object {
        @JvmStatic fun one() {}
        fun two() {}
    }
}

 

companion object의 2개 함수를 선언하였다.

 

Java와의 호환성을 생각한다면 위 예처럼 @JvmStatic 어노테이션을 사용해주어야 한다.

 

 

함수 one은 @JvmStatic을 붙였고, 함수 two는 붙이지 않았으므로 Java에서 two를 호출하고자하면 에러가 발생한다.

 

만약 에러를 없애고자 한다면 one처럼 @JvmStatic 어노테이션을 사용하던가 중간의 .Companion 아래 two로 접근하여야만 한다.

 

 

 

 


3. 참 조

 

 

Object Expressions, Object Declarations and Companion Objects - Kotlin Programming Language

 

kotlinlang.org

 

 

Calling Kotlin from Java - Kotlin Programming Language

 

kotlinlang.org

 

 

 

 

300x250