[kotlin] 코틀린에서 인터페이스의 상속과 확장 함수 사용하기

코틀린은 강력한 객체 지향 프로그래밍 언어로서, 인터페이스를 사용하여 코드를 구조화할 수 있습니다. 이번 포스트에서는 코틀린에서 인터페이스의 상속과 확장 함수를 어떻게 사용하는지 알아보겠습니다.

인터페이스 상속하기

코틀린에서 인터페이스는 클래스와 마찬가지로 상속을 받을 수 있습니다. 상속하는 방법은 일반적인 클래스 상속과 동일합니다. 다음은 인터페이스 상속의 예시입니다.

interface Animal {
    fun speak()
}

interface Mammal : Animal {
    fun eat()
}

class Dog : Mammal {
    override fun speak() {
        println("멍멍!")
    }

    override fun eat() {
        println("개사료를 먹습니다.")
    }
}

fun main() {
    val dog = Dog()
    dog.speak() // 출력: 멍멍!
    dog.eat() // 출력: 개사료를 먹습니다.
}

위의 코드에서 Animal 인터페이스는 Mammal 인터페이스에 상속되고, Dog 클래스는 Mammal 인터페이스를 구현합니다. Dog 클래스는 speak()eat() 메서드를 구현하여 각각 멍멍이 소리를 내고 개사료를 먹습니다.

확장 함수 사용하기

코틀린에서는 확장 함수(extension function)를 사용하여 이미 존재하는 클래스에 새로운 멤버 함수를 추가할 수 있습니다. 확장 함수는 해당 클래스의 내부에 직접 정의하는 것이 아니라 외부에서 정의하며, 이후에는 해당 클래스의 객체에서 마치 자신의 멤버 함수인 것처럼 호출할 수 있습니다.

다음은 String 클래스에 reverse()라는 확장 함수를 작성한 예시입니다.

fun String.reverse(): String {
    return this.reversed()
}

fun main() {
    val str = "Hello, Kotlin!"
    val reversedStr = str.reverse()
    println(reversedStr) // 출력: "!niltok ,olleH"
}

위의 코드에서 reverse()String 클래스를 확장한 확장 함수입니다. this 키워드를 사용하여 확장 함수를 호출한 문자열 자체를 가리킬 수 있습니다. 따라서 str.reverse()str을 역순으로 뒤집은 결과를 반환합니다.

마치며

코틀린에서는 인터페이스의 상속을 통해 코드를 구조화하고, 확장 함수를 사용하여 기존 클래스에 기능을 추가할 수 있습니다. 이러한 기능을 활용하여 보다 유연하고 강력한 코드 구현을 할 수 있습니다.


참고 자료