Kotlin static 이용 Companion Object
Notepad96
·2020. 10. 3. 23:21
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. 참 조
'Kotlin > Syntax' 카테고리의 다른 글
Kotlin 중첩, 내부, 데이터 클래스 (0) | 2020.10.06 |
---|---|
Kotlin 추상 클래스(Abstract class), 인터페이스(Interface) (0) | 2020.10.04 |
Kotlin Singleton pattern - object (0) | 2020.10.02 |
Kotlin 접근 지정자(= 가시성 지정자, Visibility Modifiers) (0) | 2020.10.01 |
Kotlin null, nullable 타입 (0) | 2020.09.23 |