코틀린은 강력한 객체 지향 프로그래밍 언어로서, 인터페이스를 사용하여 코드를 구조화할 수 있습니다. 이번 포스트에서는 코틀린에서 인터페이스의 상속과 확장 함수를 어떻게 사용하는지 알아보겠습니다.
인터페이스 상속하기
코틀린에서 인터페이스는 클래스와 마찬가지로 상속을 받을 수 있습니다. 상속하는 방법은 일반적인 클래스 상속과 동일합니다. 다음은 인터페이스 상속의 예시입니다.
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
을 역순으로 뒤집은 결과를 반환합니다.
마치며
코틀린에서는 인터페이스의 상속을 통해 코드를 구조화하고, 확장 함수를 사용하여 기존 클래스에 기능을 추가할 수 있습니다. 이러한 기능을 활용하여 보다 유연하고 강력한 코드 구현을 할 수 있습니다.