[kotlin] 코틀린에서 클래스 계층구조와 인터페이스 계층구조 비교

코틀린은 객체지향 프로그래밍 언어로서, 클래스와 인터페이스를 통해 코드를 구조화할 수 있습니다. 이 두 가지 구조는 각각 클래스 계층구조와 인터페이스 계층구조를 형성합니다. 이번 글에서는 코틀린에서 클래스 계층구조와 인터페이스 계층구조의 특징과 차이점을 살펴보겠습니다.

클래스 계층구조

클래스 계층구조는 상속을 통해 클래스들을 계층적으로 구성하는 방법입니다. 코틀린에서는 클래스를 정의할 때 class 키워드를 사용합니다. 클래스 계층구조는 자식 클래스가 부모 클래스의 특성과 기능을 상속받을 수 있도록 합니다.

open class Animal {
    open fun makeSound() {
        println("Animal makes sound")
    }
}

class Dog : Animal() {
    override fun makeSound() {
        println("Dog barks")
    }
}

class Cat : Animal() {
    override fun makeSound() {
        println("Cat meows")
    }
}

위의 예제에서 Animal 클래스를 상속받는 DogCat 클래스가 있습니다. DogCat 클래스는 makeSound() 함수를 재정의하여 각각 개와 고양이의 소리를 출력하도록 하였습니다. 이렇게 상속을 통해 클래스를 계층적으로 구성할 수 있으며, 부모 클래스의 속성과 메서드를 자식 클래스에서 사용할 수 있습니다.

인터페이스 계층구조

인터페이스 계층구조는 클래스들이 특정한 역할을 수행하기 위해 구현하는 인터페이스들의 계층적인 구조입니다. 코틀린에서는 클래스가 인터페이스를 구현하기 위해 implements 키워드 대신 : 키워드를 사용합니다.

interface Drawable {
    fun draw()
}

interface Colorable {
    fun setColor(color: String)
}

class Square : Drawable, Colorable {
    override fun draw() {
        println("Drawing a square")
    }

    override fun setColor(color: String) {
        println("Setting square color to $color")
    }
}

위의 예제에서 DrawableColorable 인터페이스를 구현하는 Square 클래스가 있습니다. Square 클래스는 draw()setColor() 함수를 구현하여 사각형을 그리고 색상을 설정하는 기능을 가지게 됩니다.

인터페이스 계층구조에서는 한 클래스가 여러 개의 인터페이스를 구현할 수 있으며, 해당 인터페이스들이 제공하는 기능을 모두 사용할 수 있습니다. 또한, 인터페이스 계층구조를 통해 다중 상속과 유사한 효과를 얻을 수 있습니다.

비교

클래스 계층구조와 인터페이스 계층구조의 가장 큰 차이점은 상속과 구현의 방식입니다. 클래스 계층구조에서는 상속을 사용하여 부모 클래스의 특성과 기능을 자식 클래스에게 상속받을 수 있습니다. 반면에 인터페이스 계층구조에서는 클래스가 인터페이스를 구현함으로써 해당 인터페이스의 기능을 사용할 수 있습니다.

클래스 계층구조는 하나의 부모 클래스를 상속받는 단일 상속 구조이지만, 인터페이스 계층구조에서는 여러 개의 인터페이스를 구현할 수 있으며 다중 상속과 유사한 효과를 얻을 수 있습니다.

이 외에도 클래스 계층구조와 인터페이스 계층구조는 각각 다양한 특징과 활용 방법을 가지고 있으므로, 상황에 맞게 선택하여 사용해야 합니다.

결론

코틀린에서 클래스 계층구조와 인터페이스 계층구조는 코드를 구조화하고 재사용성을 높이는데 중요한 역할을 합니다. 클래스 계층구조는 상속을 통해 부모 클래스의 특성과 기능을 상속받을 수 있으며, 인터페이스 계층구조는 클래스가 특정한 역할을 수행하기 위해 인터페이스를 구현함으로써 필요한 기능을 사용할 수 있습니다. 이러한 계층구조들을 적절하게 활용하여 코드를 작성하면 모듈화되고 유지보수가 용이한 코드를 만들 수 있습니다.


참고 자료: