티스토리 뷰

언어/Kotlin

[Kotlin]인터페이스(interface)

꼬마우뇽이(원종운) 2022. 3. 20. 10:39

인터페이스

코틀린의 인터페이스는 자바 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
링크
«   2024/11   »
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
글 보관함