추상화(abstract): 클래스 개념 설계도구
abstract class Design {
abstract fun drawText()
abstract fun draw()
fun showWindow() {
// code
}
}
class Implements: Design(){
fun drawText() {
// 구현 코드
}
fun draw() {
// 구현 코드
}
}
abstract class Animal {
fun walk(){
Log.d("abstract", "걷습니다.")
}
abstract fun move()
}
walk는 명확하게 걸어가는 행위이지만 move는 어떤 동물이냐에 따라서 달라질 수 있다.
예를 들어 새는 날아가겠지만 고래는 수영을 한다.
이렇게 ☆앞으로 상속받을 자식 클래스의 특징에 따라 코드가 결정될 가능성이 있다면 해당 기능도 모두 abstract 키워드로 추상화한다.☆
그리고 실제 구현 클래스는 이 추상 클래스를 상속받아서 아직 구현되지 않은 추상화되어 있는 기능을 모두 구현해준다.
추상 클래스는 독립적으로 인스턴스화할 수 없기 때문에 구현 단계가 고려되지 않는다면 잘못된 설계가 될 수 있다.
위에서 잠깐 안드로이드의 Activity 클래스를 언급했는데, Activity도 수많은 클래스를 상속받아 만들어진다.
이 Activity가 상솓받는 클래스 중에 최상위에 Context라는 클래스가 있는데, 최상위 클래스인 Context가 바로 abstract로 설계되어 있다.
class Bird: Animal(){
override fun move(){
Log.d("abstract", "날아서 이동합니다.")
}
}