클래스 - 인터페이스

황승현·2023년 12월 7일
0

코틀린 강의 정리

목록 보기
20/36

인터페이스

공통적으로 필요한 기능을 외부에서 추가하는 것

기본 개념

  • 코틀린은 부모 클래스가 반드시 1개라서 모두 상속으로 처리 불가능
    • 근본적인 공통점: 상속받아서 사용
    • 그 외의 기능: 인터페이스로 추가
  • 코틀린은 interface 키워드로 인터페이스를 구현

인터페이스 사용 이유

  • 상속을 이용해서 클래스 관계를 구분해도, 자식 클래스가 부모와는 다른 특성을 가지고 싶음
    • 예를 들어 '동물'이라는 부모 클래스와, '소', '오리', '돼지', '악어'라는 자식 클래스가 있을 때
    • 부모 클래스 동물에 '숨을 쉰다.' 처럼 공통적인 내용을 추가함
    • '악어' 클래스에만 넣을 수 있는 '데스롤을 한다.'라는 행위(메서드)를 추가하고 싶다면 인터페이스를 사용

인터페이스 기본 구조

  • 추상 메서드: 아래 코드처럼 메서드의 로직이 존재하지 않고 이름만 존재하는 것
  • 인터페이스는 일반적으로 추상 메서드로 작성한다.
interface 인터페이스이름 {
	fun 메서드이름()
}

예시

interface WaterBirdBehavior {
    fun swim()
//    fun swim() {
//        println("수영 합니다")
//    }
}
fun main() {
    var bird = Bird("새")
    var chicken = Chicken("닭")
    var sparrow = Sparrow("참새")
    var pigeon = Pigeon("비둘기")
    var duck = Duck("오리")

    bird.fly()
    chicken.fly()
    sparrow.fly()
    pigeon.fly()
    duck.swim()
}

open class Bird(name:String) {
    var name: String = ""

    init {
        // this는 현재 클래스의 상태변수를 의미합니다
        // var name: String = ""
        this.name = name
    }

    fun fly() {
        println("${name} 날아요~")
    }

}

class Chicken(name: String) : Bird(name) {

}

class Sparrow(name: String) : Bird(name) {

}

class Pigeon(name: String) : Bird(name) {

}

class Duck(name: String) : Bird(name), WaterBirdBehavior {
    override fun swim() {
        println("${name}가 수영해요~")
    }
}

참고자료

https://kotlinlang.org/docs/interfaces.html

0개의 댓글