본 글은 https://kotlinlang.org/docs/home.html 를 기반으로 작성자 마음대로 번역한 글입니다.
오역 & 의역이 빈번하며 모든 질문 및 태클 환영합니다!
2022-02-04 기준으로 작성되었습니다.
코틀린의 인터페이스는 메소드 구현과 같은 abstract 메소드의 선언을 포함할 수 있습니다. abstract 클래스와 다른 점은 상태를 저장하지 않는다는 것입니다. 인터페이스는 abstract이거나 접근자 구현을 제공하는 프로퍼티만 가질 수 있습니다.
인터페이스는 interface 키워드를 사용하여 정의됩니다:
Implementing interfaces
클래스나 오브젝트는 한 개 이상의 인터페이스를 구현할 수 있습니다.
Properties in interfaces
인터페이스에 프로퍼티를 정의할 수 있습니다. 인터페이스에 선언된 프로퍼티는 abstract이거나 접근자를 위한 구현을 제공할 수 있습니다. 인터페이스에 선언된 프로퍼티는 backing field를 가질 수 없으므로, 인터페이스에 선언된 접근자는 그들을 참조할 수 없습니다.
Interface inheritance
인터페이스는 다른 인터페이스에서 파생될 수 있습니다. 즉, 멤버 구현을 제공하고 새로운 함수와 프로퍼티를 선언할 수 있습니다. 당연히도 이러한 인터페이스를 구현하는 클래스는 누락된 구현을 정의하는데에만 필요합니다.
Resolving overriding conflicts
슈퍼 타입 리스트로 많은 타입을 선언하면, 같은 메소드에 대한 여러 구현을 상속받을 수 있습니다.
인터페이스 A와 B는 모두 함수 foo()와 bar()를 선언합니다. 두개 모두 foo()를 구현하나 bar()는 B만 구현합니다. (인터페이스에서 함수의 바디가 없는 것이 기본값이므로 bar()는 A에서 abstract로 표시되지 않습니다.) 이제, A로부터 구현 클래스 C를 파생하는 경우, bar()를 오버라이드하여 구현을 제공해야합니다.
그러나, A와 B에서 D를 파생하는 경우, 여러 인터페이스로부터 상속받은 모든 메소드를 구현해야하며, D가 그들을 정확히 어떻게 구현할 것인지 특정해야합니다. 이 규칙은 단일 구현의 상속(bar())과 여러 구현의 상속(foo())에도 동일하게 적용됩니다.
https://kotlinlang.org/docs/interfaces.html
Interfaces | Kotlin
kotlinlang.org
'Kotlin > Docs' 카테고리의 다른 글
[Kotlin Docs] Visibility modifiers (0) | 2022.02.24 |
---|---|
[Kotlin Docs] Functional (SAM) interfaces (0) | 2022.02.17 |
[Kotlin Docs] Properties (0) | 2022.02.03 |
[Kotlin Docs] Inheritance (0) | 2022.01.24 |
[Kotlin Docs] Classes (0) | 2022.01.24 |