본문 바로가기
Kotlin Language/Kotlin 기본 문법

Kotlin(코틀린) - 인터페이스(Interface)

by Classic Master 2023. 12. 3.
728x90

Interface 란?

  • 코틀린에서의 인터페이스는 자바의 인터페이스와 유사하지만 몇 가지 차이점이 있습니다. 
  • 구현부가 있는 함수가 정의될 수 있습니다. 단 어떤 멤버(field)도 가질 수 없습니다.
  • 아래에서 코틀린 인터페이스에 대한 주요 특징을 설명하겠습니다.

Interface 선언

  • 코틀린에서는 인터페이스를 선언할 때 'interface' 키워드를 사용합니다.
interface MyInterface {
    // 인터페이스 내용
}

 

다중 인터페이스 구현

  • 코틀린 클래스는 여러 개의 인터페이스를 동시에 구현할 수 있습니다.
interface Interface1 {
    fun method1()
}
interface Interface2 {
    fun method2()
}
class MyClass : Interface1, Interface2 {
    // Interface1에서 상속받은 메서드 구현
    override fun method1() {
        println("1번 메소드")
    }

    // Interface2에서 상속받은 메서드 구현
    override fun method2() {
        println("2번 메소드")
    }
}

 

프로퍼티 구현

  • 코틀린의 인터페이스에서는 프로퍼티(멤버 변수)를 선언할 수 있습니다.
    프로퍼티는 추상이 될 수도 있고, getter나 setter가 있는 구현이 있는 프로퍼티도 가능합니다.
interface MyInterface {
    val property: Int         // 추상 프로퍼티

    val propertyWithImplementation: String
        get() = "디폴트"  // getter 구현이 있는 프로퍼티
}

 

추상 메서드와 구현이 있는 메서드

  • 코틀린의 인터페이스는 추상 메서드뿐만 아니라 구현이 있는 메서드도 가질 수 있습니다.
  • 추상 메서드는 기존과 마찬가지로 선언만 하고 구현은 하위 클래스에서 해야 합니다.
  • 구현이 있는 메서드는 하위 클래스에서 구현을 강제하지 않으며, 기본 구현을 사용하거나 오버라이드할 수 있습니다.
interface MyInterface {
    fun abstractMethod()      // 추상 메서드

    fun defaultMethod() {     // 구현이 있는 메서드 (기본 구현)
        println("Default implementation")
    }
}

 


인터페이스 에러

추상 메서드 미구현

  • MyClass는 MyInterface를 구현하고 있지만, 추상 메서드인 myMethod에 대한 구현이 없기 때문에 컴파일 오류가 발생합니다.
// 인터페이스 선언
interface MyInterface {
    fun myMethod()
}

// 인터페이스를 구현하는 클래스
class MyClass : MyInterface {
    // 오류: 'myMethod'에 대한 구현이 없음
}

fun main() {
    val obj = MyClass()
    obj.myMethod() // 에러: 'myMethod'를 찾을 수 없음
}

 

프로퍼티 초기화 오류

  • MyClass는 MyInterface를 구현하고 있지만, 추상 프로퍼티인 myProperty에 대한 초기화가 없기 때문에 컴파일 오류가 발생합니다.
// 인터페이스 선언
interface MyInterface {
    val myProperty: Int
}

// 인터페이스를 구현하는 클래스
class MyClass : MyInterface {
    // 에러: 'myProperty'에 대한 초기화가 없음
}

fun main() {
    val obj = MyClass()
    println(obj.myProperty) // 에러: 'myProperty'를 찾을 수 없음
}
728x90
반응형