[kotlin] 코틀린에서 인터페이스의 다형성 활용 방법

코틀린은 객체 지향 프로그래밍 언어로, 인터페이스를 통해 다형성을 활용할 수 있습니다. 다형성은 객체가 다양한 타입으로 구현될 수 있음을 의미하며, 이를 통해 유연하고 확장 가능한 코드를 작성할 수 있습니다.

인터페이스 정의하기

다형성을 활용하기 위해서는 먼저 인터페이스를 정의해야 합니다. 인터페이스는 어떤 메서드들이 있어야 하는지를 정의한 뒤, 해당 인터페이스를 구현하는 클래스들을 작성할 수 있습니다. 예를 들어, 다음과 같이 Shape 인터페이스를 정의해보겠습니다.

interface Shape {
    fun area(): Double
    fun perimeter(): Double
}

위 코드에서는 Shape 인터페이스에 areaperimeter라는 두 개의 메서드를 정의하였습니다.

인터페이스 구현하기

인터페이스를 정의한 후, 해당 인터페이스를 구현하는 클래스들을 작성할 수 있습니다. 구현 클래스는 인터페이스에서 정의된 메서드를 모두 재정의해야 합니다. 다음은 Shape 인터페이스를 구현하는 Circle 클래스의 예시입니다.

class Circle(private val radius: Double) : Shape {
    override fun area(): Double {
        return Math.PI * radius * radius
    }

    override fun perimeter(): Double {
        return 2 * Math.PI * radius
    }
}

위 코드에서는 Circle 클래스가 Shape 인터페이스를 구현하고 있으며, areaperimeter 메서드를 재정의하였습니다.

인터페이스 다형성 활용하기

인터페이스를 구현한 클래스들은 해당 인터페이스의 타입으로 변수를 선언하고 다형성을 활용할 수 있습니다. 예를 들어, 다음과 같이 Shape 인터페이스의 다형성을 활용하는 코드를 작성할 수 있습니다.

fun printShapeDetails(shape: Shape) {
    println("Area: ${shape.area()}")
    println("Perimeter: ${shape.perimeter()}")
}

fun main() {
    val circle = Circle(5.0)
    printShapeDetails(circle)
}

위 코드에서는 printShapeDetails 함수가 Shape 타입의 매개변수를 받아 해당 도형의 넓이와 둘레를 출력하는 예시입니다. main 함수에서는 Circle 객체를 생성하고, 이를 printShapeDetails 함수에 인자로 전달하는 예시도 포함되어 있습니다.

이렇게 인터페이스의 다형성을 통해 동일한 인터페이스를 구현하는 다양한 클래스들을 처리할 수 있습니다.