본문 바로가기
코틀린

코틀린(8) - 생성자

by 왈레 2022. 3. 21.

생성자

class Person (var name:String, val brithYear:Int) // << 생성자

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

(코틀린은 자바, C++과는 달리 클래스 선언 부분에서 이름에 괄호를 붙여 기본 생성자를 만들 있다.)

 

생성자란 새로운 인스턴스를 만들기 위해 호출하는 특수한 함수인데, var a = Person("홍길동", 1990) 생성자를 호출하면 클래스의 인스턴스를 만들어 반환받을 있다.

생성자는 인스턴스의 속성을 초기화하는 기능뿐만 아니라 인스턴스 생성시 구문을 수행할 있다.

이는 init이라는 함수 통해 수행이 가능하다.

 

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

this

this 인스턴스 자신의 속성이나 함수를 호출하기 위해 클래스 내부에서 사용되는 키워드이다. 클래스 자신의 속성임이 확실할때는 this 생략해도 동작한다.

fun main( ){
	var a = Person("홍길동", 1990)
}
class Person(var name:String, val brithYear:Int) {
    init{
    	println("안녕하세요, ${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
    }
}

출력 : 1990년생 박보영님이 생성되었습니다.

 

항상 모든 속성을 수동으로 초기화 하는 것이 비효율적인 경우도 있다.

예를들어 Person 클래스를 사용하여 100명의 사람이 가진 이름과 태어난 년도를 인스턴스로 만든다고 가정해보자.

그 중 90명도 1997년생이라면 1997년을 '기본값'으로 만들 있는 방법이 있다면 효율적이지 않겠는가?

 

  • 기본 생성자 : 클래스를 만들 기본으로 선언
  • 보조 생성자(constructor) : 필요에 따라 추가적으로 선언

보조 생성자는 기본 생성자와 다른 형태의 생성자를 제공하여 인스턴스 생성시 편의를 제공하거나 추가적인 구문을 수행하는 기능을 제공하는 역할을 한다.

중요한 점은 보조 생성자를 만들 때는 반드시 기본 생성자를 통해 속성을 초기화 해줘야 한다.

보조 생성자가 기본 생성자를 호출하도록 하려면 콜론(:) 붙인 this라는 키워드를 사용하고, 기본 생성자가 필요로 하는 파라미터 괄호안에 넣어주면 된다.

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

    constructor(name:String) :this(name, 1997){
    	println("보조 생성자가 사용되었습니다")
    }
}

기본생성자와 보조생성자는 클래스를 사용하는 사람에게 다양한 방법으로 인스턴스를 생하는 성하는 법을 제시함으로써 편의를 제공하는 기능이다.

 

 

 

 

댓글