: 새로운 인스턴스를 만들기 위해서 호출하는 특수한 함수
생성자 호출 시 클래스의 인스턴스를 만들어 반환받을 수 있다.
*인스턴스(instance)? : 일반적으로 실행 중인 임의의 프로세스, 클래스의 현재 생성된 오브젝트(객체)
class Person(var name:String, val birthYear:Int //생성자)
main(){
//Person 인스턴스를 3개 만든다.
var a = Person("박보영", 1990)
var b = Person("전정국", 1997)
var c = Person("장원영", 2004)
}
class Person (var name:String, val bitrhYear:Int){
init{
println("${this.bitrhYear}년생 ${this.name}님이 생성되었습니다."}
}
}
//인스턴스의 생성을 통해 init이 호출되어 세 개의 인스턴스에 넣은 속성들이 출력된다.
*this? : 인스턴스 자신의 속성이나 함수를 호출하기 위해 클래스 내부에서 사용되는 키워드
생성자 사용 시 모든 속성을 수동으로 초기화하는 것이 비효율적인 경우가 있다.
→ 따라서, 클래스를 만들 때 기본으로 선언하는 기본 생성자에 추가로 필요에 따라 추가적으로 선언하는 보조 생성자를 만든다.
보조 생성자는 기본 생성자와 다른 형태의 생성자를 제공하여 인스턴스 생성 시 편의를 제공하거나 추가적인 구문을 수행하는 기능을 제공하는 역할을 한다.
보조 생성자는 constructor 라는 키워드를 사용한다.
fun main(){
//Person 인스턴스를 3개 만든다.
var a = Person("박보영", 1990)
var b = Person("전정국", 1997)
var c = Person("장원영", 2004)
var d = Person("이루다")
var e = Person("차은우")
var f = Person("류수정")
}
class Person (var name:String, val birthYear:Int){
init{
println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
}
constructor(name:String) : this(name, 1997){
println("보조 생성자가 사용되었습니다.")
}
}
보조 생성자를 만들 때는 반드시 기본 생성자를 통해 속성을 초기화 해야 한다.
보조 생성자가 기본 생성자를 호출하도록 하려면 콜론(:)을 붙인 후 this 키워드를 사용하고, 기본 생성자가 필요로 하는 파라미터를 괄호 안에 넣어야 한다.
참고자료
디모의 코틀린 강좌