3-3. Kotlin 클래스 추상화
2020. 3. 4. 20:58ㆍ소프트웨어 공학/코딩 공부
본 내용은 kotlinlang.org 공식 문헌과 기타 자료들을 바탕으로 필자가 학습한 내용을 정리한 것입니다.
필자의 허락 없이 글을 상업적 목적으로 인용, 수정, 재배포할 수 없습니다. 내용의 오류 지적은 덧글로 받습니다.
추상 클래스
abstract class Juice(val type: String) { // 추상 클래스
val volume = 100 // 오버라이드 불가
abstract fun print() // 추상 멤버
}
class OrangeJuice : Juice("orange") {
override fun print() {
println("I'm orange juice.")
}
}
추상 클래스는 추상화된 멤버를 가질 수 있다는 것을 제외하면 일반 클래스와 똑같다. 1
abstract 키워드에 의해 추상화된 멤버는 자동으로 open 상태가 된다. 2
인터페이스
interface Example {
fun noBody() // 몸체 없음
fun withBody() {
// 몸체 구현
}
}
// Example 구현체
class Inheritor : Example {
override noBody() {
println("noBody() invoked")
}
}
인터페이스는 완전히 추상화된 클래스이다. 모든 멤버가 추상화되었으므로 abstract 키워드는 필요없다.
함수는 몸체가 없어도 되지만, 필요하면 만들 수 있다. 인터페이스를 구현하는 방법은 일반 클래스를 상속하는 방식과 같다. 3
프로퍼티
interface Super {
val int: Int = 5 // 오류!
val string: String
get() = "foo" // Getter 구현 가능.
fun foo() {
print(int)
}
}
class Inheritor : Super {
override val int: Int = 0
}
인터페이스에 존재하는 프로퍼티는 다음 규칙을 따라야 한다.
- Be abstract - 값을 초기화할 수 없다.
- Accessor Implementation - Getter/Setter를 임의로 구현할 수 있다. (다만 backing field 참조는 불가능)
추상화 방식의 비교
분류 | 키워드 | 비(非)추상 멤버 | 추상 멤버 | 오버라이드 |
일반 클래스 | open | 허용 | 불허 | *허용 |
추상 클래스 | abstract | 허용 | *허용 | 허용 |
인터페이스 | interface | 불허 | 허용 | 허용 |
※ *허용 표기된 항목은 키워드를 명시한 경우에만 허용한다는 의미입니다.
※ 추상 멤버: 몸체의 구현을 하위 클래스에게 넘긴 함수 또는 프로퍼티.
'소프트웨어 공학 > 코딩 공부' 카테고리의 다른 글
Java - JSR223 스크립트 API (0) | 2020.03.06 |
---|---|
3-2. Kotlin 클래스 상속 (1) | 2020.03.03 |
3-1. Kotlin 클래스 생성자 (0) | 2020.03.03 |
3. Kotlin 클래스 (0) | 2020.03.03 |
2. Kotlin 자료형 (1) | 2020.03.02 |