Objects in Kotlin

2020. 6. 21. 23:11카테고리 없음

1. 소개

코 틀린은 다른 언어로부터 많은 아이디어를 빌렸다. 그러한 구성 중 하나는 객체입니다.

이 빠른 기사에서는 객체가 무엇이며 어떻게 사용할 수 있는지 살펴 보겠습니다.

 

2. 코 틀린의 객체

Kotlin에는 거의 모든 JVM 언어에서 와 같이 객체 지향 프로그래밍 모델의 핵심으로서 클래스 개념이 있습니다. 코 틀린은 그 위에 객체 의 개념을 소개합니다 .

반면 클래스는 원하는 필요에 따라 많은 경우로, 수 있습니다 때와 같이 인스턴스화 할 수 있습니다 구조에 대해 설명 객체가 아닌 단일 정적 인스턴스를 나타내며 ,이 하나의 인스턴스보다 더 많거나 적은 결코 할 수 있습니다.

이것은 싱글 톤 객체 및 캡슐화를위한 기능의 간단한 패키징을 포함하여 다양한 기술에 유용합니다.

object SimpleSingleton {
    val answer = 42;
    fun greet(name: String) = "Hello, $name!"
}
 
assertEquals(42, SimpleSingleton.answer)
assertEquals("Hello, world!", SimpleSingleton.greet("world"))

 

 

객체는 또한 가시성 수정자를 완벽하게 지원 하므로 다른 클래스와 마찬가지로 데이터 숨기기 및 캡슐화가 가능합니다.

object Counter {
    private var count: Int = 0
 
    fun currentCount() = count
 
    fun increment() {
        ++count
    }
}
Counter.increment()
println(Counter.currentCount())
println(Counter.count) // this will fail to compile

또한 객체는 클래스를 확장하고 인터페이스를 구현할 수 있습니다 . 그렇게하면 효과적으로 예상대로 부모 클래스의 단일 인스턴스가됩니다.

이는 상태 비 저장 구현이 있고 매번 새 인스턴스를 만들 필요가없는 경우 (예 : Comparator)에 매우 유용합니다 .

object ReverseStringComparator : Comparator<String> {
    override fun compare(o1: String, o2: String) = o1.reversed().compareTo(o2.reversed())
}
 
val strings = listOf("Hello", "World")
val sortedStrings = strings.sortedWith(ReverseStringComparator)

 

3. 동반자 개체 란 무엇입니까?

컴패니언 개체는 기본 개체 정의 와 기본적으로 동일하며 개발을보다 쉽게하기 위해 몇 가지 추가 기능 만 있습니다.

컴패니언 객체는 항상 다른 클래스 내에서 선언됩니다. 이름을 가질 수는 있지만 이름이 필요하지 않습니다 .이 경우 자동으로 이름이 Companion입니다 .

class OuterClass {
    companion object { // Equivalent to "companion object Companion"
    }
}

 

컴패니언 객체를 사용하면 이름을 지정하지 않고도 컴패니언 클래스 내부에서 멤버에 액세스 할 수 있습니다 .

동시에 클래스 이름이 접두어로 표시되면 클래스 외부에서 보이는 멤버에 액세스 할 수 있습니다.

class OuterClass {
    companion object {
        private val secret = "You can't see me"
        val public = "You can see me"
    }
 
    fun getSecretValue() = secret
}
 
assertEquals("You can see me", OuterClass.public)
assertEquals("You can't see me", OuterClass.secret) // Cannot access 'secret'

 

4. 정적 필드

컴패니언 객체의 주요 용도는 Java에서 알려진 정적 필드 / 메소드를 대체하는 것 입니다. 그러나 이러한 필드는 결과 클래스 파일에서 자동으로 생성되지 않습니다.

생성해야하는 경우 필드 에서 @JvmStatic 주석을 대신 사용해야합니다. 그러면 예상대로 바이트 코드가 생성됩니다.

class StaticClass {
    companion object {
        @JvmStatic
        val staticField = 42
    }
}

 

이 작업을 수행하지 않으면 정적 필드 staticField 에 Java 코드에서 쉽게 액세스 할 수 없습니다.

이 주석을 추가하면 표준 정적 필드에 필요한대로 필드가 생성되므로 필요한 경우 Java와의 완전한 상호 운용성이 가능합니다 .

이 수단은 위에서 생성하는 정적 메소드 getStaticField () 상의 StaticClass의 클래스.

5. 결론

Kotlin의 객체는 사용할 수있는 추가 레이어를 추가하여 코드를 더욱 간소화하고 개발하기 쉽게 만듭니다.

그런 다음 컴패니언 개체는이 작업을 한층 더 수행하여 유지 관리 및 작업이보다 간편한 코드를 제공합니다.

항상 그렇듯이 코드 스 니펫은 GitHub 에서 찾을 수 있습니다 .

 

https://www.baeldung.com/kotlin-objects