1. abstract란
- abstract: 추상
- abstract class: 자식클래스에서 반드시 오버라이딩 해야만 사용할수 있는 메소드를 의미
- 객체 지향 프로그래밍 언어에서 중요한 개념
- 클래스나 메서드에 사용되며, 구체적인 구현을 제공하지 않아도 되지만, 이를 상속 받는 하위 클래스에서 구체적인 구현을 제공해야 함.
2. 특징
1) 클래스: 직접 인스턴스화할 수 없다. 이를 상속받는 하위 클래스에서 구체적 구현
abstract class Animal{
abstract fun Bowwow()
}
2) 메서드: 하위 클래스에서 반드시오버라이드
abstract class Animal {
abstract fun speak()
}
class Dog : Animal() {
override fun speak() {
println("Woof!")
}
}
3) 프로퍼티: 초기 값이 제공되지 않으며, 하위클래스에서 반드시 오버라이드
abstract class Shape {
abstract val area: Double
}
3. abstract를 사용하는 이유
1) 강제적인 템플릿 제공
- 하위 클래스에 대한 템플릿 역할을 함으로써. 부여된 강제성은 일관된 인터페이스의 사용을 보장하고, 실수로 메서드나 프로퍼티 구현을 누락하는 것을 방지
2) 코드의 재사용
- 공통적인 로직이나 상태를 'abstract' 클래스에 정의함으로써, 여러 하위 클래스에서 해당 로직을 재사용
3) 확장성
- 클래스의 상속을 통해 쉽게 확장, 새로운 하위 클래스를 추가하면서 기존 코드의 변경 없이 기능을 확장
4) 타입 확장성
- 특정 유형의 객체를 기대하는 위치에만 그 유형의 객체가 사용될 수 있도록 보장
5) 모듈화의 분리
- 인터페이스와 구현을 분리, 유지보수 향상, 가독성 증가
6) 디자인 패턴의 기반
- 많은 디자인 패턴은 추상화를 중심으로 구성
- 디자인 패턴을 구현하는데 필수
7) 정의와 구현의 분리
- 어떤 기능이 필요한지와 그 기능이 어떻게 구현되는지 분리. 이로 인해 시스템의 아키텍처를 더욱 명확하게 정의
Reference
http://wiki.hash.kr/index.php/Abstract