인터페이스와 추상 클래스

두주·2023년 12월 21일
0

TIL

목록 보기
20/58

오늘 인터페이스를 처음 사용해 보았다.

추상 클래스와 비슷한 역할을 한다는 점은 알고있었는데,
정확히 어떤 차이가 있는지 알아보았다.

인터페이스

인터페이스는 구현 부분이 없는 클래스이다.
인터페이스의 생성자를 만들 수 없고, 인터페이스의 객체 역시 직접 만들 수 없다.

어떻게 인터페이스를 사용할까?

다른 클래스가 인터페이스를 상속받고(구현하고) 그 클래스에서
인터페이스의 메서드를 사용하여 구현한 뒤 그 클래스의 객체를 통해 사용할 수 있다.

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 프로퍼티를 어떻게 써먹는지는 더 공부해야 할 것 같다.

그래도 매일 공부하려는 내용이 하나씩 추가되는 것이
나름 의미있다고 느껴진다.

내일도 힘 내야지.

profile
야옹.

0개의 댓글