추상화
✔ 클래스와 클래스 안에 있음 직한 기능을 이름만 작성하여 설계
✔ 독립적으로 인스턴스화 불가능
✔ 상속받을 자식 클래스의 특징에 따라 코드가 결정된다.
abstract class Animal() {
fun walk() {
Log.d("abstract", "걷습니다")
}
abstract fun move()
}
class Bird: Animal() {
override fun move() {
Log.d("abstract", "날아서 이동합니다.")
}
}
인터페이스
[ 추상화와 인터페이스 비교 ]
◾ 추상화 : 누군가 설계해 놓은 개념 클래스 중에 실행 코드가 한 줄이라도 있으면
◾ 인터페이스 : 실행 코드 없이 메서드 이름만 가진(블록도 없이) 추상 클래스
✔ 외부 모듈에서 내가 만든 모듈을 사용할 수 있도록 메서드의 이름을 나열해둔 명세서
✔ 인터페이스에 정의된 메서드를 오버라이드해서 구현
✔ 다른 객체지향 언어와는 다르게 프로퍼티도 인터페이스 내부에서 정의 가능
interface InterfaceKotlin {
var variable: String
fun get()
fun set()
}
// 구현 방법 1 : 클래스 상속 형태
class KotlinImpl: InterfaceKotlin {
override var variable: String = "init value"
override fun get() {
// 코드 구현
}
override fun set() {
// 코드 구현
}
}
// 구현 방법 2 : 소스 코드에서 직접 구현
class kotlinImpl = object: InterfaceKotlin {
override var variable: String = "init"
override fun get() {
// 코드
}
override fun set() {
// 코드
}
}
접근 제한자
✔ private : 자기 자신 클래스 제외 모두 접근 불가능
✔ internal : 같은 모듈(앱)에 있는 파일만 접근 가능
✔ protected : private와 같으나 상속 관계에서 자식 클래스의 접근은 허용
✔ public(default) : 모두 접근 가능
제네릭
✔ 입력되는 값의 타입을 자유롭게 사용하기 위한 설계 도구
var list: MutableList<String> = mutableListOf()
list.add("월")
list.add("화")
list.add("수")
for (item in list) {
Log.d("Generic", "list에 입력된 값은 ${item}입니다.")
}
'Kotlin' 카테고리의 다른 글
[Android] [Kotlin] 지연 초기화 (0) | 2021.08.30 |
---|---|
[Android] [Kotlin] Null Safety (0) | 2021.08.30 |
[Android] [Kotlin] 클래스 (0) | 2021.08.30 |
[Android] [Kotlin] 함수 (0) | 2021.08.30 |
[Android] [Kotlin] 반복문 (0) | 2021.08.30 |