인터페이스란?
서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다.
공통부분을 여러 클래스에서 동시에 사용할 수 있도로 강제한다. 추상화 클래스처럼 단독으로 사용할 수 없으며 반드시 상속을 받아 사용한다.
왜 사용할까?
예를 들어 신라면, 짜파게티라는 클래스가 있다고 하자. 둘 다 면, 스프라는 속성을 공유한다. 만약 안성탕면, 너구리, 육개장 클래스가 추가된다고 할 때 그때마다 면, 스프라는 속성을 선언해야 할 때 만약 스프라는 속성을 생략한다면 우리는 그것을 라면이라 부르지 않을 것이다. 이처럼 인터페이스는 필요한 속성을 사용해야 한다고 강제하는 역할을 한다.
인터페이스는 아래의 예시코드처럼 선언한다.
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
'코틀린' 카테고리의 다른 글
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 |