-클래스 이름 옆에 기술하는 생성자
자바에는 없는 생성자이며, 주(대표) 생성자라고 부릅니다.
-그 외 클래스 내부에 만들어지는 다른 오버로딩된 생성자들은 보조 생성자라고 부릅니다.
-주생성자에 매개변수들을 var, val 등을 붙여서 선언합니다
-이렇게 만들어진 매개변수들은 매개변수이기도 하지만, 클래스의 멤버변수가 되기도 합니다.
-아래 클래스 TestClass13의 이름옆에 생성자는 매개변수가 없는 디폴트 생성자를 대체하는 생성자로서, 매개변수 없는 생성자는
현재 클래스에서 없다고 생각해야합니다. 디폴트 생성자를 추가해야 한다면 보조 생성자로 오버로딩 되게 생성합니다.
그때 오버로딩되는 클래스 내부의 생성자는 보조 생성자라고도 부릅니다.
-클래스의 이름 옆에 있는 대표(주)생성자는 객체 생성시에 "반드시 한번은 호출" 되어야하는 강제 규칙이 있습니다.
-이는 보조 생성자가 있고 보조생성자가 호출되더라도 마찬가지입니다.
-만약 객체 생성시에 보조생성자가 호출되었다면, 해당 보조 생성자에서 대표생성자를 재호출해야 에러가 나지 않습니다.
-보조 생성자에서 디폴트 생성자를 재호출하는 방법은 Constructor() 옆에 :this(디폴트생성자에 맞는 전달인수) 형태로 호출합니다
-클래스 이름 옆에 대표 생성자는 "멤버변수를 포함하고 있기 때문에" 그를 호출하지 않으면 객체 생성시
멤버 변수가 만들어지지 않는다는 말과 같습니다. 따라서 반드시 this 호출이 필요합니다.
-클래스 이름 옆에 대표 생성자를 만들고 나서 오버로딩된 다른 보조 생성자를 사용하고 싶을 때
class TestClass15 constructor(var a1:Int, val a2:Int){
constructor() : this(10,20){
println("매개변수가 없는 보조 생성자 호출")
}
constructor(a1:Int) : this(10,a1) {
println("매개변수가 한개인 보조생성자 호출")
}
}
class TestClass12{
var v1:Int = 0
var v2:Int = 0
//생성자(Constructor)를 만듭니다.
//생성자를 만들지 않으면 내부에 존재하는 디폴트 생성자가 사용되지만, 인위적으로 꺼내서 따로 기술할 수 있습니다.
//코틀린 클래스의 생성자의 이름은 클래스이름을 따르지 않고, 그냥 Contstructor라고 사용합니다.
constructor() {
println("매개변수가 없는 생성자")
v1 = 100
v2 = 200
}
//constructor라는 이름의 생성자는 오버로딩도 가능합니다.
constructor(a1:Int, a2:Int){
println("매개변수가 있는 생성자")
v1 = a1
v2 = a2
}
}
val obj2 = TestClass12() //매개변수가 없는 생성자 호출
println("obj2: $obj2")
println("obj2.v1 : ${obj2.v1}")
println("obj2.v2 : ${obj2.v2}")
val obj3 = TestClass12(300,400) //매개변수가 있는 생성자 호출
println("obj3: $obj3")
println("obj3.v1 : ${obj3.v1}")
println("obj3.v2 : ${obj3.v2}")
'Kotlin' 카테고리의 다른 글
Override (0) | 2022.09.02 |
---|---|
Extends (상속) (0) | 2022.09.01 |
Class (0) | 2022.09.01 |
Array (배열) (0) | 2022.09.01 |
Loop (반복문) (0) | 2022.09.01 |