오도원입니다.

건강과 행복을 위하여

Development/Kotlin

Kotlin. 클래스 생성자

오도원공육사 2020. 5. 9. 11:29
반응형

생성자란?

클래스에서 생성자는 클래스 선언시, 클래스 이름 우측에 괄호에 적었던 속성들이다. 

class Person(var name:String, val birthYear:Int)

이것은 클래스의 '속성'들을 선언함과 동시에 '생성자' 역시 선언하는 방법이다.


새로운 인스턴스를 만들기 위해 호출하는 특별한 함수이다.


생성자를 호출하면 클래스의 인스턴스를 만들어 반환한다. 생성자는 인스턴스의 속성을 초기화하고, 인스턴스 생성시 필요한 구문을 수행한다.

 

init함수

init함수는 파라미터나 반환형이 없는 특수한 함수이다. 생성자를 통해 인스턴스가 만들어질 때 호출되는 함수이다.

 

# init함수 예제

fun main() {
    var a = Person("오도원", 1997)
    var b = Person("류준열", 1986)
    var c = Person("이동휘", 1985)
}

class Person(var name:String, val birthYear:Int){
    init{
    	println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
    }
}

인스턴스 생성시 init이 호출되어 세 개의 인스턴스에 넣은 속성들이 출력되었다.

 

보조 생성자(Secondary Constructor)

클래스를 만들 때 기본으로 선언하는 기본 생성자와 필요에 따라 추가적으로 선언하는 보조 생성자가 있다. 보조 생성자는 인스턴스 생성시 편의를 제공하거나 추가적인 구문을 수행하는 기능을 제공한다. 

 

보조 생성자는 constructor라는 키워드를 사용한다.

 

주의할 점은 보조 생성자를 사용할 때는 반드시 기본 생성자를 통해 속성을 초기화해줘야한다. 또한 보조 생성자가 기본 생성자를 호출하도록 하려면 콜론(:) 후, this로 기본생성자가 필요로하는 파라미터를 괄호안에 넣어준다.

 

이 예제에서는 name은 받은 그대로 넘겨주고, 년도는 1997년으로 고정하여 초기화하도록 하였다.

fun main() {
    var a = Person("오도원", 1997)
    var b = Person("류준열", 1986)
    var c = Person("이동휘", 1985)
    
    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("보조 생성자가 호출되었습니다.")
    }
}

 

반응형