[kotlin] 코틀린에서 상속과 인터페이스를 이용한 기능 추가 예제

코틀린은 Java와 호환되는 언어로, 상속과 인터페이스를 사용하여 클래스에 기능을 추가할 수 있습니다. 이번 예제에서는 코틀린의 상속과 인터페이스 개념을 사용하여 간단한 기능을 추가하는 방법을 알아보겠습니다.

1. 상속을 이용한 기능 추가

상속을 이용하여 클래스에 기능을 추가하는 방법은 쉽습니다. 다음은 상속을 이용하여 간단한 계산기 기능을 추가하는 예제입니다.

open class Calculator {
    open fun add(a: Int, b: Int): Int {
        return a + b
    }
}

class ScientificCalculator : Calculator() {
    override fun add(a: Int, b: Int): Int {
        val result = super.add(a, b)
        // 추가적인 연산 수행
        return result * 2
    }

    fun multiply(a: Int, b: Int): Int {
        return a * b
    }
}

fun main() {
    val calculator = ScientificCalculator()
    println(calculator.add(2, 3)) // 출력: 10
    println(calculator.multiply(2, 3)) // 출력: 6
}

상속을 통해 Calculator 클래스를 상속받은 ScientificCalculator 클래스를 만들고, add 함수를 오버라이딩하여 추가적인 연산을 수행합니다. multiply 함수는 ScientificCalculator 클래스에만 존재하는 기능입니다.

2. 인터페이스를 이용한 기능 추가

인터페이스를 이용하여 클래스에 기능을 추가하는 방법은 상속과 유사합니다. 다음은 인터페이스를 이용하여 문자열 처리 기능을 추가하는 예제입니다.

interface StringProcessor {
    fun process(str: String): String
}

class UppercaseStringProcessor : StringProcessor {
    override fun process(str: String): String {
        return str.toUpperCase()
    }
}

class ReverseStringProcessor : StringProcessor {
    override fun process(str: String): String {
        return str.reversed()
    }
}

fun processString(str: String, processor: StringProcessor): String {
    return processor.process(str)
}

fun main() {
    val input = "Hello, Kotlin!"

    val uppercaseProcessor = UppercaseStringProcessor()
    val uppercaseResult = processString(input, uppercaseProcessor)
    println(uppercaseResult) // 출력: "HELLO, KOTLIN!"

    val reverseProcessor = ReverseStringProcessor()
    val reverseResult = processString(input, reverseProcessor)
    println(reverseResult) // 출력: "!niltok ,olleH"
}

인터페이스인 StringProcessor를 구현한 UppercaseStringProcessorReverseStringProcessor 클래스를 만들어 문자열 처리 기능을 추가합니다. processString 함수는 문자열과 StringProcessor를 인자로 받아 처리된 결과를 반환합니다.

이렇게 코틀린에서 상속과 인터페이스를 이용하여 기능을 추가하는 방법을 살펴보았습니다. 코틀린의 상속과 인터페이스 개념을 잘 활용하여 유연하고 확장 가능한 코드를 작성해보세요!