코틀린 보조 생성자
2022/10/16(목요일)
보조 생성자
보조 생성자는 클래스의 본문에 constructor 키워드로 선언하는 함수이다. 클래스 본문에 선언하므로 여러 개를 추가할 수 있다.
다음 코드에서는 매개변수를 다르게 구성한 보조 생성자를 2개 선언했다. 보조 생성자도 생성자이므로 객체를 생성할 때 자동으로 호출된다. 그리고 보조 생성자는 클래스 본문에 선언하므로 생성자 본문을 중괄호 { }로 묶어서 객체 생성과 동시에 실행할 영역을 지정할 수 있다.
- 보조 생성자 선언
class User{
constructor(name : String){
println("constructor(name : String) call...")
}
constructor(name: String, count : Int){
println("constructor(name : Stirng, count: Int) call...")
}
}
fun main(){
val user1 = User("lh99j")
val user2 = User("lh99j", 23)
}
보조 생성자에 주 생성자 연결
코틀린의 생성자는 주 생성자와 보조 생성자로 나뉜다. 클래스를 선언할 때 둘 중 하나만 선언하면 문제가 없지만, 만약 주 생성자와 보조 생성자를 모두 선언한다면 반드시 생성자끼리 연결해 주어야 한다.
- 주 생성자와 보조 생성자 선언 시 오류
class User(name : String){
constructor(name : String, count : Int){ // 오류!
...
}
}
클래스에 주 생성자와 보조 생성자를 모두 선언했다. 그런데 위의 코드는 오류가 발생한다. 주 생성자가 없다면 보조 생성자를 선언하는 데 문제가 없지만 주 생성자가 있으므로 보조 생성자에서 주 생성자를 호출해 주어야 한다.
보조 생성자는 객체를 생성할 때 호출되며, 이때 클래스 내에 주 생성자가 있다면 this() 구문을 이용해 주 생성자를 호출해야 한다.
- 보조 생성자에서 주 생성자 호출
class User(name : String){
constructor(name : String, count : Int) : this(name){ // 성공!!
...
}
}
fun main(){
val user = User("lh99j", 23)
}
보조 생성자 선언분에 this(name)만 추가한 코드이다. 이렇게 하면 보조 생성자로 객체를 생성할 때 주 생성자가 같이 호출된다.
만약 주 생성자가 있는 상태에서 보조 생성자를 여러 개 선언한다면 보조 생성자에서 this()로 다른 보조 생성자를 호출할 수도 있다. 그런데 이대에도 보조 생성자로 객체를 생성한다면 어떤 식으로든 주 생성자가 호출되게 해야 한다.
- 보조 생성자가 여럿일 때 생성자 연결
class User(name : String){
constructor(name : String, count : Int) : this(name){
...
}
constructor(name : String, count : Int, email : String) : this(name, count){
...
}
}
fun main(){
val user = User("lh99j", 23, "grand2181@gmail.com")
}