Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- CoordinatorLayout
- 알림
- Behavior
- notification
- BOJ
- Navigation
- 안드로이드
- recyclerview
- CustomView
- AppBarLayout
- kotlin
- DataBinding
- HTTP
- sqlite
- LiveData
- View
- ViewModel
- room
- activity
- 백준
- onMeasure
- onLayout
- Coroutine
- 알고리즘
- hilt
- CollapsingToolbarLayout
- 코틀린
- Algorithm
- Android
- lifecycle
Archives
- Today
- Total
개발일지
Kotlin in A..Z (19) - 인터페이스 본문
- 인터페이스 (interface)
- 추상 클래스는 클래스이기 때문에 상속에 관하여 문제점을 야기할 수 있다. (이중 상속, 상속으로 인한 강한 연관성
- 추상 클래스와 비슷한 개념이지만 프로퍼티를 통해 상태를 저장할 수 없다.
- abstract 키워드가 생략되어도 자동으로 붙는다.
코드
interface Test {
// abstract 키워드 없이 자동으로 추상 프로퍼티, 값을 초기화 할 수 없음
val value:Int
// Java의 default처럼 메소드를 정의할 수 있음
fun action1() {
println("Test Action1")
}
// abstarct 키워드 없이 자동으로 추상 메소드
fun action2()
}
class Parent : Test {
// override 키워드를 통해 재정의
override val value: Int = 0
// override 키워드를 통해 재정의
override fun action2() {
println("Parent Action2")
}
}
fun main() {
val parent = Parent()
parent.action1()
parent.action2()
}
결과
Test
- 인스턴스 getter를 이용한 프로퍼티 초기화
getter를 이용하여 마치 프로퍼티를 초기화한 것 처럼 표현할 수 있다. 하지만 getter와 setter에 사용하던 value와 field를 사용할 수 없다.
코드
interface Test {
val value:Int
get() = 0
}
- 이름이 같은 메서드를 가진 인터페이스의 구현
- 동일한 이름을 가진 추상 프로퍼티와 추상 메소드는 하나로 통일하여 구현한다.
- 이미 구현된 메소드는 재정의한다.
코드
interface A {
val value: Int
fun func()
fun action() {
println("A Action")
}
}
interface B {
val value: Int
fun func()
fun action() {
println("B Action")
}
}
class Test : A, B {
override val value: Int = 0
override fun func() {
println("하나만 구현하면 된다.")
}
override fun action() {
// super<?> 키워드로 특정 인터페이스의 함수를 접근할 수 있음
// 동일한 이름의 가진 메소드는 반드시 재정의해야한다.
super<A>.action()
super<B>.action()
}
}
- 인터페이스 위임
by 위임을 통해 인터페이스의 프로퍼티와 메소드를 바로 접근할 수 있다.
코드
interface Run {
fun run() {
println("Run")
}
}
interface Fly {
fun fly() {
println("Fly")
}
}
class Animal(private val run: Run, private val fly: Fly) : Run by run, Fly by fly {
fun action() {
// 인터페이스를 통해 위임 받았기 때문에 바로 접근할 수 있음
run()
fly()
}
}
'Kotlin (코틀린)' 카테고리의 다른 글
Kotlin in A..Z (21) - 데이터 클래스 (0) | 2020.07.17 |
---|---|
Kotlin in A..Z (20) - 추상 클래스 (0) | 2020.07.17 |
Kotlin in A..Z (18) - companion object, object, 싱글톤 (0) | 2020.07.16 |
Kotlin in A..Z (17) - 지연 초기화와 by 위임 (0) | 2020.07.15 |
Kotlin in A..Z (16) - 프로퍼티 getter, setter (0) | 2020.07.15 |
Comments