Kotlin

Interface

본이qq 2022. 9. 2. 10:21

- 인터페이스 : 추상클래스가 할 수 없었던 다중 상속이 가능합니다.

  자바의 버젼이 업그레이드 되면서, 인터페이스에도 override 강제성이 부여되지 않은 일반 변수와 메서드 선언이 가능해졌습니다

 

 

 

<interface 2개 생성>

interface  Inter1{
    fun inter1_Method1(){
        println("Inter1의 Method1입니다")
    } // override 의 강제성이 부여되지 않는 메서드
    fun inter1_Method2()  //override 강제성이 부여된 메서드
}

interface Inter2{
    fun inter2_Method1(){
        println("Inter2의 Method1입니다")
    }
    fun inter2_Method2()
}

-> {} 가 없는 메서드는 오버라이딩이 필요한 추상메서드 

 

 

 

<interface를 구현하는 3개의 클래스 생성> 

class TestClass51:Inter1{
    override fun inter1_Method2() {
        println("TestClass51의 오버라이딩 된 Method2 입니다")
    }
}
class TestClass52 : Inter2{
    override fun inter2_Method2() {
        println("TestClass52의 오버라이딩 된 Method2 입니다")
    }
}

// 두개이상의 인터페이스를 구현 하려면 인터페이스 이름들을 "," 로 구분하여 기술합니다
class TestClass53 : Inter1, Inter2{
    override fun inter1_Method2() {
        println("testClass53의 inter1에서 오버라이딩 된 Method2 입니다")
    }
    override fun inter2_Method2() {
        println("testClass53의 inter2에서 오버라이딩 된 Method2 입니다")
    }
}

-TestClass 51, 52 는 각각 Inter1과 Inter2 구현

-TestClass 53은 Inter1과 Inter2 구현 

 

 

 

<Main>

val obj1 = TestClass51()  // Inter1 을 상속(구현)받은 자식클래스
val obj2 = TestClass52()  // Inter2 를 상속(구현)받은 자식클래스
val obj3 = TestClass53()  // Inter1, Inter2 을 상속(구현)받은 자식클래스
obj1.inter1_Method1()
obj1.inter1_Method2()

-> obj1 객체의 inter1_Method1 메서드는 오버라이딩 되지 않은 인터페이스 객체의 메서드 

 

 

 

마찬가지로,

obj2.inter2_Method1()
obj2.inter2_Method2()

 

 

obj3.inter1_Method1()
obj3.inter2_Method1()
obj3.inter1_Method2()
obj3.inter2_Method2()

 

 

<함수생성>

fun testFun1( obj:Inter1 ){
    obj.inter1_Method1()
    obj.inter1_Method2()
}
fun testFun2( obj:Inter2 ){
    obj.inter2_Method1()
    obj.inter2_Method2()
}

-> 부모중  해당 인터페이스가 구현되어있는 객체만 전달인수로 사용이 가능합니다.

 

testFun1(obj1)   // obj2 는 전달할수 없습니다.
testFun2(obj2)   // obj1 은 전달할수 없습니다.
testFun1(obj3)   // Inter1 이 구현되었으므로 전달인수로 전달 가능
testFun2(obj3)   // Inter2 이 구현되었으므로 전달인수로 전달 가능