코틀린

16. 인터페이스

mks160615 2025. 2. 6. 21:27

인터페이스란?

서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다.

 

공통부분을 여러 클래스에서 동시에 사용할 수 있도로 강제한다. 추상화 클래스처럼 단독으로 사용할 수 없으며 반드시 상속을 받아 사용한다.

 

왜 사용할까?

예를 들어 신라면, 짜파게티라는 클래스가 있다고 하자. 둘 다 면, 스프라는 속성을 공유한다. 만약 안성탕면, 너구리, 육개장 클래스가 추가된다고 할 때 그때마다 면, 스프라는 속성을 선언해야 할 때 만약 스프라는 속성을 생략한다면 우리는 그것을 라면이라 부르지 않을 것이다. 이처럼 인터페이스는 필요한 속성을 사용해야 한다고 강제하는 역할을 한다.

 

인터페이스는 아래의 예시코드처럼 선언한다.

interface AirCraft{
    val company : String
    fun fly(company: String, model: String)
}

 

인터페이스의 모든 속성은 전부 abstract처럼 선언해야 한다. 이렇게 선언된 인터페이스는 아래의 코드처럼 상속받아 사용한다.

추상화에서 마찬가지로 부모에서 받은 모든 객체는 자녀에서 반드시 정의해야 한다.

class Airbus : AirCraft{
    override val company: String
        get() = "Airbus"

    override fun fly(company: String, model: String) {
        println("$company $model")
    }
}

 

인터페이스를 상속받은 클래스는 메인 함수에서 아래와 같이 사용할 수 있다.

val a350 = Airbus()
a350.fly(a350.company, "A350") // Airbus A350

다중 상속

자바 기반인 코틀린 역시 원칙적으로 다중 상속이 불가능하다. 그러나 자바와 마찬가지로 인터페이스는 다중 상속이 가능하다. 새로운 인터페이스를 선언 후 두 인터페이스를 받은 클래스 코드까지 작성해 보았다.

interface Carrier {
    fun carrier () : String
}

class Boeing : AirCraft, Carrier{
    override val company: String
        get() = "Boeing"

    override fun fly(company: String, model: String) {
        println("$company $model flying")
    }

    override fun carrier(): String {
        return "Korean Air"
    }
}

두 개의 인터페이스를 상속받은 클래스는 모든 객체를 구체화해야 한다.

 

이렇게 선언된 인터페이스는 메인 함수에서 다음과 같이 사용할 수 있다.

val b787 = Boeing()
println(b787.carrier()) // Korean Air
b787.fly(b787.company, "B787") // Boeing B787 flying

 

 

 

GitHub - KrillM/Kotlin_Again: init project

init project. Contribute to KrillM/Kotlin_Again development by creating an account on GitHub.

github.com

 

 

 

'코틀린' 카테고리의 다른 글

17. Null  (0) 2025.02.08
15. 클래스 - Object  (0) 2025.02.06
14. 추상 클래스, 데이터 클래스  (0) 2025.02.05
13. 클래스 - 상속  (0) 2025.01.29
12. 클래스 - 기본  (1) 2025.01.29