안 쓰던 블로그

코틀린 - 상속과 인터페이스 차이 본문

안드로이드

코틀린 - 상속과 인터페이스 차이

proqk 2020. 7. 18. 19:12
반응형

생성자: 설명서, 인스턴스화 가능하다

인터페이스: 지침서, 생성자가 없다, 인스턴스화 불가능하다

 

인터페이스는 약속->니가 이것을 구현하면 너도 이 타입이다 라는 약속

생성자가 없다->인스터스화 시킬 수 없다->설명서가 아니다

인터페이스는 지침서->니가 이것을 구현하고 싶다면 반드시 아래 기능을 구현해라

 

상속이 만들어 낸 아래와 같은 특징이 인터페이스에서도 적용된다

-자식 클래스는 부모 클래스의 타입이다

-부모 클래스는 자식 클래스의 타입이 아니다

 

상속

open class Person() {
    open fun eat() {
    }
    
    fun sleep() {
    }
}

class Student() : Person() {
    override fun eat() {
    	super.eat()
    }
}

class Teacher() : Person() {
}

상속을 써야 할 때:

-자식 클래스에서 반복되는 기능을 부모 클래스에 올려두고 싶을 때

-부모 클래스에 있는 기능을 자식에서 쓰긴 쓰는데 조금 다를 때

 

 

인터페이스

fun main(args: Array<String>){
    val student_: Student_ = Student_()
    student_.eat()
    student_.sleep()
}

interface Person_ {
    fun eat()
    fun sleep()
}

class Student_ : Person_ {
    override fun eat() {
    }
    
    override fun sleep() {    	
    }
}

class SoccerPlay : Person_ {
    override fun eat() {    		
    }
    
    override fun sleep() {    	
    }
}

인터페이스를 써야 할 때:

-부모 클래스에 있는 기능을 자식에서 쓰는데 내용이 많이 다를 때

-다른 개발자와 협업 할 때

 

예) 만약 여러 명이서 개발을 하는데 나는 main을 했고 누군가가 인터페이스 Person과 클래스 Student, SoccerPlay를 만들었다고 할 때

나는 그 사람이 뭘 만들었는지 알지 않아도 무조건 eat과 sleep은 있다는 점을 안다

갖다 쓰면 된다

 

상속vs인터페이스

상속은 조상을 찾아가는 느낌 (자식들의 공통된 특징-최소한의 기능을 모은다)

인터페이스는 종의 특징 (사람은 먹고 잔다->먹고 자면 사람이다-이 특징을 만족하면 이 종이다)

 

반응형
Comments