클래스를 통해 객체가 만들어질 때 기본적으로 호출되는 함수
객체 생성시 필요한 값을 인자로 설정할 수 있게 한다.
생성자를 위해 특별한 함수인 constructor()를 정의
class 클래스명 constructor(필요한 매개변수들...) //주 생성자의 위치
{
constructor(필요한 매개변수들...) //부 생성자의 위치
{
// 프로퍼티의 초기화
}
constructor(...) // 추가 부 생성자
{
...
}
...
}
딱 한번만 위에서 정의될 수 있음
클래스명과 함께 기술되며 보통의 경우 constructor 키워드를 생략 가능
✍🏻 예제
class Bird(var name : String, var wing : Int, var beak : String, var color : String)
{
fun fly() = println("Fly wing : ${wing}")
fun sing(vol : Int) = println ("Sing vol : $vol")
}
fun main()
{
val coco = Bird("mybird", 2, "short", "blue")
println("coco.name ${coco.name}")
coco.fly()
coco.sing(3)
}
//결과
coco.name : mybird
Fly wing : 2
Sing vol : 3
var name : String
프로퍼티
클래스 본문에 기술되며 하나 이상의 부 생성자를 정의할 수 있다.
✍🏻 예제
class Bird
{
//프로퍼티들 선언만 함
var name : String
var wing : Int
var beak : String
var color : String
//부 생성자 - 매개변수를 통해 초기화할 프로퍼티에 지정
constructor(name : String, wing : Int, beak : String, color : String)
{
this.name = name //선언된 현재 클래스의 프로퍼티를 나타냄
this.wing = wing
this.beak = beak
this.color = color
}
fun main()
{
// 생성자의 인자로 객체 생성(부 생성자 호출)과 동시에 초기화
val coco = Bird("mybird", 2, "short", "blue")
}
✍🏻 추가 인자 초기화
부 생성자를 사용하여 프로퍼티에 없는 인자를 초기화하려면, 해당 부 생성자에 매개변수를 추가하면 된다.
class Bird
{
var name: String
var wing: Int
var beak: String
var color: String
var age: Int // 추가적인 프로퍼티
constructor(name: String, wing: Int, beak: String, color: String, age: Int)
{
this.name = name
this.wing = wing
this.beak = beak
this.color = color
this.age = age // 추가적인 프로퍼티 초기화
}
}
val 프로피터는 변경 불가, var는 변경 가능