728x90
다양한 생성자 선언
class Person constructor(name: String, age: Int) {
var name: String = name
var age: Int = age
init {
if (age <= 0) {
throw IllegalArgumentException("나이는 ${age}일 수 없습니다.")
}
}
}
class Person1(
val name: String,
val age: Int
) {
init {
if (age <= 0) {
throw IllegalArgumentException("나이는 ${age}일 수 없습니다.")
}
}
}
class Person2 constructor(name: String, age: Int) {
var name: String = name
var age: Int = age
constructor(name: String): this(name, 1)
constructor(): this("홍길동") {
println("두 번째 부생성자")
println(name)
println(age)
}
init {
if (age <= 0) {
throw IllegalArgumentException("나이는 ${age}일 수 없습니다.")
}
}
}
fun main() {
val person = Person("홍길동", 1)
println(person)
person.age = 10
println(person)
val person1 = Person1("홍길동", 10)
println(person1.age)
val person2 = Person2("홍길동")
println(person2.age)
val person3 = Person2()
}
함수 문과 식(statement vs expression)
{
fun isAdult1(): Boolean {
return this.age >= 20
}
val isAdult2: Boolean
get() = this.age >= 20
val isAdult3: Boolean
get() {
return this.age >= 20
}
}
자바로 변환 시 함수 앞에 final 이 붙습니다.
모두 동일한 기능이고 표현 방식만 다릅니다.
객체의 속성이라면, custom getter를 쓴다. 그렇지 않다면 함수를 씁니다.
custom getter, setter 선언 방법
var name: String = name
get() = field.uppercase()
set(value) {
field = value.uppercase()
}
abstract class Animal(
protected val species : String,
protected open val legCount : Int,
) {
abstract fun move()
}
class Penguin(
species: String,
private val wingCount: Int = 2
) : Animal(species, 2) {
override fun move() {
println("팽귄이 움직입니다.")
}
override val legCount: Int
get() = super.legCount + this.wingCount
}
추상 클래스는 인스턴스화 할 수 없다.
상속의 특징
상속 관련 키워드 4가지 정리
1. final : override 를 할 수 없게 한다. default 로 보이지 않게 존재한다.
2. open : override 를 열어 준다.
3. abstract : 반드시 override 해야 한다.
4. override : 상위 타입을 오버라이드 하고 있다.
상속 또는 구현을 할 때에 : 을 사용해야 한다.
상위 클래스 상속을 구현할 때 생성자를 반드시 호출해야 한다.
override 를 필수로 붙여야 한다.
추상 맴버가 아니면 기본적으로 오버라이드가 불가능하다.
- open 을 사용해주어야 한다.
상위 클래스의 생성자 또는 초기화 블록에서 open 프로퍼티를 사용하면 얘기치 못한 버그가 생길 수 있다.
728x90
'Kotlin' 카테고리의 다른 글
코틀린 - Object 함수(Companion) (0) | 2023.05.01 |
---|---|
코틀린 - 접근 제어자 (0) | 2023.05.01 |
Kotlin - 기본 문법2 (0) | 2023.04.17 |
Kotlin - 기본 문법1 (0) | 2023.03.27 |
Kotlin - 변수 선언 (0) | 2023.03.01 |
댓글