아래는 코모스튜디오가 직접 만든 무료 앱이에요(한 번만 봐주세요 ^^)
주 생성자와 부 생성자 2가지로 나뉘며,
주 생성자는 클래스 선언 시 가시성 접근자(없으면 클래스 명) 뒤에 선언한다.
- class Car private constructor(_name: String)
- 자바는 부 생성자 처럼 클래스 내부에 선언 한다
- private class Car { class(String name) }
부 생성자는 클래스 내부에서 파라미터를 달리하여 만든다.
- class Car private constructor(_name: String) { constructor(value: Int)}
클래스 생성 시 생성자를 정의하지 않으면 컴파일러는 인자가 없는 디폴트 생성자를 만든다
주 생성자
class Car constructor(_name: String){
val name : String
init {
name = _name
}
}
class Car constructor(_name: String){
val name :_name
}
주 생성자는 생성자 파라미터를 지정하고, 그 생성자 파라미터에 의해 초기화되는 프로퍼티를 정의한다.
- 생성자 파라미터(_name)는 init{} 구문 또는, 내부 파라미터에 할당할 경우에만 사용할 수 있다.
- 단, (_name: String) 부분을 (val _name: String)로 선언할 경우에는 클래스 내부 프로퍼티로 선언되어, 클래스 내부에서 사용할 수 있다.
부 생성자
클래스에 주 생성자가 없을 경우, 모든 부 생성자는 반드시 상위 클래스를 초기화하거나, 다른 생성자에게 생성을 위임해야 한다.
open class Vehicle {
constructor(name: String){
println("Vehicle: ${name}")
}
}
class Car : Vehicle {
constructor(name: String) : super(name){
println("Car: ${name}")
//Vehicle 먼저 생성된 후 car 생성됨.
//Vehicle: name
//Car: name
}
}
- : super() 를 통해 상위 클래스(Vehicle) 의 생성자에게 생성을 위임한다.
- 상속을 받으면 상위 클래스의 생성자가 먼저 생성되고, 하위 클래스의 생성자가 생성된다.
fun main(){
Car("달구지")
//_name2: 달구지, 6
//_name1: 달구지
}
class Car {
constructor(_name1: String) : this(_name1, 6){
println("_name: ${_name1}")
}
constructor(_name2: String, number : Int){
println("_name: ${_name2}, ${number}")
}
}
- this()를 사용하여 같은 클래스의 다른 생성자에게 위임할 수 있다.
- 위임받은 생성자를 먼저 생성 한 뒤에 위임한 생성자가 생성된다.
' [안드로이드 공부] > 코틀린' 카테고리의 다른 글
null cannot be cast to non-null type androidx.appcompat.widget.appcompatimagebutton (0) | 2020.08.22 |
---|---|
smart cast to is impossible because is a mutable property that could have been changed by this time (0) | 2020.08.07 |
[MVVM] LiveData와 ViewModel Observer로 연결 (0) | 2020.08.07 |
추상클래스(abstract)와 인터페이스(interface) (0) | 2020.07.27 |
코틀린 Scope; apply, also, run, with, let (0) | 2020.07.23 |
모든 게시물은 코모스튜디오의 소유이며, 무단 복제 수정은 절대 불가입니다. |
퍼가실 경우 댓글과 블로그 주소를 남기고 해당 게시물에 출처를 명확히 밝히세요. |