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
반응형
'Kotlin Language > Kotlin 기본 문법' 카테고리의 다른 글
Kotiln(코틀린) - 예외처리(try catch,throw) (0) | 2023.12.05 |
---|---|
Kotlin(코틀린) - 접근제한자 (0) | 2023.12.05 |
Kotlin(코틀린) - 람다함수 (Lambda Expression) (0) | 2023.12.03 |
Kotlin(코틀린) - 상속(inheritance) (0) | 2023.12.01 |
Kotlin(코틀린) - 생성자(init, Constructor) (0) | 2023.12.01 |
Kotlin(코틀린) - 생성자 클래스(Class) (0) | 2023.11.30 |