Kotlin Interface

Kotlin Interface

  •  Kotlin은 다중 상속을 지원하지 않는다.
  •  특정 클래스를 동시에 두개 이상의 클래스를 상속 받는것을 의미한다.
  •  이 때문에 자기 타입의 변수나 부모형 타입 변수에만 담을 수 있다.
  •  만약, 생성된 객체의 주소 값을 다양한 타입에 변수에 담을 수 있도록 한다면 인터페이스를 활용하면 된다.

Interface

  • 여러 부모 클래스를 상속을 받아서 하나의 클래스에 모으고 싶을 때 사용한다.
  • 인터페이스는 클래스가 아니므로 객체를 생성할 떄 사용할 수 없다.
  • 단, 클래스는 한개 이상의 인터페이스를 구현할 수 있으며, 생성된 객체는 구현한 인터페이스형 참조 변수에 담을 수 있다.
  • 인터페이스에는 추상 메서드와 일반 메서드 모두를 구현해서 사용할 수 있다.
  • 인터페이스는 추상 클래스의 목적이 비슷하지만, 하나의 클래스에 여러 인터페이스를 구현할 수 있는 장점을 가지고 있다.

fun main() {
val obj1 = Inter1() // Error
}

interface Inter1 {
fun inter1Method1() {
println("Inter1 interMethod1 입니다.")
}
fun inter1Method2()
}
인터페이스는 객체를 생성 할 수 없으므로, 에러가 발생한다.
Kotlin: Interface Inter1 does not have constructors


interface Inter1 {
fun inter1Method1() {
println("Inter1 interMethod1 입니다.")
}
fun inter1Method2()
}

class TestClass3: Inter1() { // Error

}
인터페이스는 클래스가 아니므로 상속 받는것처럼 () 를 붙이면 안된다.

Kotlin: Class 'TestClass3' is not abstract and does not implement abstract member public abstract fun inter1Method2(): Unit defined in Inter1


인터페이스는 상속을 받는것 처럼 사용하되, 인터페이스는 괄호 열고 닫고가 필요 없다. 괄호를 추가하게 될 경우, 위와 같은 에러가 발생한다.

fun main() {
val obj5 = TestClass5()
testFun3(obj5)
testFun4(obj5)
}
fun testFun3(obj1:Inter1) {
obj1.inter1Method1()
obj1.inter1Method2()
}

fun testFun4(obj2:Inter2) {
obj2.inter2Method1()
obj2.inter2Method2()
}

interface Inter1 {
fun inter1Method1() {
println("Inter1 inter1Method1 입니다.")
}
fun inter1Method2()
}

interface Inter2 {
fun inter2Method1() {
println("Inter2 inter2Method1 입니다.")
}
fun inter2Method2()
}

class TestClass5 : Inter1, Inter2 {
override fun inter1Method2() {
println("TestClass5 inter1Method2 입니다.")
}

override fun inter2Method2() {
println("TestClass5 inter2Method2 입니다.")
}
}
하나의 클래스에서 두개의 인터페이스를 이용하여 두 개의 다른 메서드를 오버라이딩 할 수 있다.

하나의 클래스 TestClass5에서 두개의 인터페이스를 이용하여, 두 인터페이스에서 제공하는 추상화 클래스를 하나의 클래스에서 합쳐서 사용할 수 있다.

인터페이스를 사용하여 다양한 참조 변수에 담을 수 있는 클래스를 만들 수 있다.



댓글

이 블로그의 인기 게시물

Intel® HAXM installation failed 해결하기

Kotlin this, super