생성자

Anna·2024년 6월 11일
0

코틀린

목록 보기
17/28
post-thumbnail

생성자 란?

클래스를 통해 객체가 만들어질 때 기본적으로 호출되는 함수
객체 생성시 필요한 값을 인자로 설정할 수 있게 한다.
생성자를 위해 특별한 함수인 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 프로퍼티


부 생성자 constructor()

클래스 본문에 기술되며 하나 이상의 부 생성자를 정의할 수 있다.

✍🏻 예제

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는 변경 가능

0개의 댓글