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 이 구현되었으므로 전달인수로 전달 가능