58 lines
1.2 KiB
Markdown
58 lines
1.2 KiB
Markdown
# 인터페이스
|
|
|
|
인터페이스는 구현된 메서드를 가질 수도 있으며, 프로퍼티를 가질 수도 있습니다. 인터페이스는 `interface` 를 사용해서 선언합니다.
|
|
|
|
```kotlin
|
|
interface MyInterface {
|
|
val prop1: Int // 추상 프로퍼티
|
|
val prop2: String // 겟터가 구현된 프로퍼티
|
|
get() = "foo"
|
|
fun bar()
|
|
fun foo() {
|
|
// 바디를 가질 수도 있습니다.
|
|
}
|
|
}
|
|
```
|
|
|
|
## 다중 상속시 충돌 문제의 해결
|
|
|
|
```kotlin
|
|
interface A {
|
|
fun foo() { print("A") }
|
|
fun bar()
|
|
}
|
|
interface B {
|
|
fun foo() { print("B") }
|
|
fun bar()
|
|
}
|
|
|
|
class C : A, B {
|
|
override fun foo() {
|
|
super<A>.foo()
|
|
super<B>.foo()
|
|
}
|
|
override fun bar(){
|
|
print("C")
|
|
}
|
|
}
|
|
```
|
|
|
|
## 함수형 인터페이스
|
|
|
|
함수형 인터페이스란, 하나의 추상 메서드만을 가진 인터페이스입니다. `fun interface`를 사용해서 선언합니다.
|
|
|
|
```kotlin
|
|
fun interface KRunnable {
|
|
fun invioke()
|
|
}
|
|
```
|
|
|
|
함수형 인터페이스는 람다 표현식에서 유용하게 사용됩니다.
|
|
|
|
```kotlin
|
|
fun interface IntPredicate {
|
|
fun accept(i: Int): Boolean
|
|
}
|
|
|
|
val isEven = IntPredicate {it % 2 == 0 }
|
|
``` |