[kotlin] 코틀린에서 인터페이스의 일반적인 사용 사례
코틀린은 객체 지향 프로그래밍 언어로서, 인터페이스는 중요한 개념 중 하나입니다. 인터페이스는 클래스들 간에 공통된 기능을 정의하는데 사용되며, 다중 상속을 통해 다른 클래스나 인터페이스로부터 기능을 상속 받을 수 있습니다.
인터페이스를 사용하는 이유
- 다중 상속: 코틀린에서는 클래스는 하나의 클래스만 상속할 수 있지만, 인터페이스는 다중으로 상속할 수 있습니다. 따라서, 다른 클래스와 기능을 공유하기 위해 인터페이스를 사용할 수 있습니다.
- 클래스 간의 결합도 낮추기: 인터페이스를 사용하여 클래스 간에 결합도를 낮출 수 있습니다. 인터페이스는 구체적인 구현을 감추고 계약만을 나타내므로, 클래스들 간의 결합도를 낮추고 유연성을 높일 수 있습니다.
인터페이스의 일반적인 사용 사례
- 다른 클래스로부터 기능 상속 받기: 인터페이스를 사용하여 다른 클래스로부터 추상적인 기능을 상속 받을 수 있습니다. 예를 들어,
Clickable
인터페이스를 정의하여 모든 클릭 가능한 요소들이 해당 인터페이스를 구현하도록 할 수 있습니다.
interface Clickable {
fun onClick()
}
- 인터페이스를 구현하는 클래스들 간에 다형성 사용하기: 인터페이스를 구현하는 클래스들은 인터페이스 타입으로 다형성을 사용할 수 있습니다. 다형성을 이용하면 런타임에 동적으로 다른 구현을 선택할 수 있습니다.
class Button : Clickable {
override fun onClick() {
// 버튼을 클릭했을 때 동작하는 코드
}
}
class TextView : Clickable {
override fun onClick() {
// 텍스트 뷰를 클릭했을 때 동작하는 코드
}
}
- 인터페이스를 통한 의존성 주입하기: 인터페이스를 사용하여 클래스들 간의 의존성을 관리할 수 있습니다. 예를 들어,
Database
인터페이스를 정의하고DatabaseImpl
클래스가 해당 인터페이스를 구현하도록 할 수 있습니다. 이렇게 함으로써,DatabaseImpl
클래스와 의존하는 클래스들 간의 결합도를 낮출 수 있습니다.
interface Database {
fun save(data: String)
}
class DatabaseImpl : Database {
override fun save(data: String) {
// 데이터를 저장하는 구체적인 구현
}
}
class UserRepository(private val database: Database) {
fun saveUser(user: User) {
// 사용자 정보를 데이터베이스에 저장하는 코드
database.save(user.toJson())
}
}
마무리
코틀린에서 인터페이스는 클래스들 간의 결합도를 낮추고, 다형성과 의존성 관리를 위해 중요한 도구입니다. 이러한 이유로, 코틀린에서 인터페이스를 사용하여 코드를 더 유연하고 확장 가능하게 만들 수 있습니다.