[kotlin] 코틀린에서 추상 클래스와 인터페이스를 활용한 프로그래밍 예시

추상 클래스(Abstract class)

추상 클래스는 하나 이상의 추상 메소드를 포함하는 클래스입니다. 추상 메소드는 구현이 없는 메소드로, 하위 클래스에서 반드시 구현해야 합니다. 추상 클래스는 일반 메소드와 필드를 가질 수도 있습니다.

다음은 추상 클래스를 활용한 예시입니다. 추상 클래스 Animalsound 추상 메소드를 가지고 있으며, showSound 메소드에서 각각의 동물이 어떤 소리를 내는지 출력합니다.

abstract class Animal {
    abstract fun sound()

    fun showSound() {
        println("이 동물은 ")
        sound()
    }
}

class Cat : Animal() {
    override fun sound() {
        println("야옹")
    }
}

class Dog : Animal() {
    override fun sound() {
        println("멍멍")
    }
}

fun main() {
    val cat = Cat()
    cat.showSound() // 출력: "이 동물은 야옹"

    val dog = Dog()
    dog.showSound() // 출력: "이 동물은 멍멍"
}

인터페이스(Interface)

인터페이스는 구현이 없는 메소드와 프로퍼티로 이루어진 추상 타입입니다. 클래스는 여러 개의 인터페이스를 구현할 수 있으며, 인터페이스의 메소드와 프로퍼티를 반드시 구현해야 합니다. 인터페이스는 다중상속을 지원합니다.

다음은 인터페이스를 활용한 예시입니다. 인터페이스 Drawabledraw 메소드를 가지고 있으며, CircleRectangle 클래스는 이를 구현하여 도형을 그립니다.

interface Drawable {
    fun draw()
}

class Circle : Drawable {
    override fun draw() {
        println("원을 그립니다.")
    }
}

class Rectangle : Drawable {
    override fun draw() {
        println("사각형을 그립니다.")
    }
}

fun main() {
    val circle = Circle()
    circle.draw() // 출력: "원을 그립니다."

    val rectangle = Rectangle()
    rectangle.draw() // 출력: "사각형을 그립니다."
}

정리

코틀린에서 추상 클래스와 인터페이스를 활용하면 다형성을 구현할 수 있습니다. 추상 클래스는 추상 메소드를 가지고 있으며, 하위 클래스에서 반드시 구현해야 합니다. 인터페이스는 구현이 없는 메소드와 프로퍼티로 이루어져 있으며, 클래스는 여러 개의 인터페이스를 구현할 수 있습니다. 추상 클래스와 인터페이스를 적절히 활용하여 유연하고 확장 가능한 코드를 작성할 수 있습니다.

참고문서: 코틀린 공식문서 - 클래스와 객체