오늘 인터페이스를 처음 사용해 보았다.
추상 클래스와 비슷한 역할을 한다는 점은 알고있었는데,
정확히 어떤 차이가 있는지 알아보았다.
인터페이스
인터페이스는 구현 부분이 없는 클래스이다.
인터페이스의 생성자를 만들 수 없고, 인터페이스의 객체 역시 직접 만들 수 없다.
어떻게 인터페이스를 사용할까?
다른 클래스가 인터페이스를 상속받고(구현하고) 그 클래스에서
인터페이스의 메서드를 사용하여 구현한 뒤 그 클래스의 객체를 통해 사용할 수 있다.
interface Music {
fun play()
val youtubeURL:String
val score:Int
}
class Rock : Music {
override fun play() {
println("Rock")
}
override val youtubeURL:String = "https://youtu.be/r8OipmKFDeM?si=qGcEWoG3M8Yw_uPL"
override val score:Int : 5
}
내가 이 때까지 써왔던 abstract class (추상 클래스)와 전혀 다름이 없다.
그럼 추상 클래스는 무엇일까?
추상 클래스
추상 클래스는 인터페이스와 클래스의 중간이라고 볼 수 있다.
클래스의 특징을 가지면서도 인터페이스의 특징 또한 가지고 있다.
인터페이스와의 차이점으로 추상 메서드와 추상 프로퍼티를 가질 수 있다.
abstract class Music(val genre: String) {
abstract fun play()
abstract val youtubeURL: String
abstract val score: Int
}
class Rock : Music("Rock") {
override fun play() {
println("Rock")
}
override val youtubeURL: String = "https://youtu.be/r8OipmKFDeM?si=qGcEWoG3M8Yw_uPL"
override val score: Int = 5
}
아직 배움이 부족해 명확한 차이점을 써보려니 어려움을 느꼈다.
해당 코드에서 abstract class와 interface는 큰 차이가 없으나
추상 클래스를 사용하여 Music 클래스에 genre라는 프로퍼티를 추가했다.
추가된 genre 프로퍼티를 어떻게 써먹는지는 더 공부해야 할 것 같다.
그래도 매일 공부하려는 내용이 하나씩 추가되는 것이
나름 의미있다고 느껴진다.
내일도 힘 내야지.