티스토리 뷰
인터페이스
코틀린의 인터페이스는 자바 8 인터페이스와 거의 유사합니다. 자바처럼 인터페이스 안에는 추상 메서드뿐만 아니라 기본 구현이 있는 메서드(자바 8에서의 default 메서드를 의미합니다.) 또한 정의할 수 있습니다. 하지만 인터페이스에는 상태(필드)는 들어갈 수 없지만, 프로퍼티는 선언할 수 있습니다.
인터페이스 선언
interface Closeable {
val short: String // 프로퍼티
fun close() // 추상 메서드
fun closeBy(name: String) { // default 메서드
println("name : $name")
close()
}
}
자바와 크게 다르지 않게 인터페이스를 선언하고, 인터페이스 안에 추상 메서드를 선언할 수 있습니다.
인터페이스 구현
interface Closeable {
fun close()
val short: String
}
class Resource : Closeable {
override val short: String
get() = "RESOURCE SHORT"
override fun close() {
println("Close Resource")
}
}
인터페이스 구현의 경우 자바와 다르게 코틀린에서는 "implements" 키워드를 사용하지 않습니다. 콜론(":")을 클래스 명 뒤에 선언한 후 인터페이스 명을 적어주시면 됩니다. 그러면 의문이 들 수 있습니다. "클래스 상속은 어떻게 하는 거지?"라는 생각이 들 수 있습니다.
이는 다음 기회에 살펴볼 예정이지만, 잠시 알아보고 가면 콜론(":")을 클래스 명 뒤에 선언하는 것은 동일하지만, 인터페이스와는 다르게 클래스 상속의 경우는 클래스의 특정 생성자를 호출하는 형식을 뜁니다.
만약 위 코드에서 Closeable이 클래스였다면, "Resource : Closeable"이 아닌 "Resource : Closeable()"의 형식이라는 의미입니다.
또한 자바와 다른 점은 자바는 특정 메서드의 오버라이드를 명시적으로 표현하기 위하여 @Override 애너테이션을 사용합니다. 하지만 @Override 애너테이션을 사용하지 않았다고 해서 컴파일 타임에 에러가 발생하진 않습니다.
코틀린에서는 이러한 부분을 개선하여 특정 메서드를 오버라이드 할 경우 override keyword를 명시적으로 사용하게끔 강제하였습니다. 만약 해당 메서드가 오버라이드되는 메서드임에도 불구하고 override 키워드를 사용하지 않는다면 컴파일 타임에 에러가 발생합니다.
interface Closeable {
fun close()
val short: String
}
class Resource : Closeable {
val short: String
get() = "RESOURCE SHORT"
fun close() {
println("Close Resource")
}
}
Resource 클래스의 close 메서드에 override 키워드가 없는 것을 확인할 수 있습니다. 다음과 같은 에러가 발생하게 됩니다.
'close' hides member of supertype 'Closeable' and needs 'override' modifier
이는 보다 안전하게 컴파일 타임에 인터페이스가 구현이 되었는지를 확인할 수 있게 도와줍니다.
'언어 > Kotlin' 카테고리의 다른 글
[Kotlin]데이터 클래스(data class) (0) | 2022.03.20 |
---|---|
[Kotlin]예외(Exception) 처리 (1) | 2022.03.20 |
- Total
- Today
- Yesterday
- 코드 스니펫
- dp
- 회고
- sql
- 쓰레드
- 프로그래머스
- dfs
- 비트연산
- 우선순위큐
- 카카오
- 탐욕법
- 연결리스트
- kotlin
- JPA
- 정렬
- 해쉬
- Uber
- 스택
- 스트림
- set
- k8s
- 구현
- BFS
- 오늘의집
- Java
- 코딩인터뷰
- TDD
- 알고리즘
- 문자열
- dsu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |