엄코딩의 개발 일지

코틀린 생성자



코틀린은 자바와 다르게 클래스 내부에 생성자를 만들지 않고 클래스 선언부에서 constructor 키워드를 사용하여 생성자를 만듭니다.


class Animal constructor(type:Int) {

}


위의 코드처럼 생성자를 선언할 수 있지만 코틀린에서는 일반적으로 클래스 선언부에 constructor 키워드를 생략할 수 있습니다.


class Animal (type:Int)

{


}


코틀린에서 생성자를 여러 개 선언해야 하는 경우는 어떻게해야 할까요?


class Animal constructor(type:Int) {

var type:Int = 1
var name:String = "사자"

constructor(type: Int,name: String) : this(type)

constructor(type: Int,name: String,age:Int) : this(type)

}


위의 소스에서 var은 수정 가능한 변수를 의미합니다. 이와는 반대개념인 val은 자바에서 final과 같이 수정이 불가능한 변수를 의미합니다.


코틀린에서는 기본 생성자 외의 생성자는 this(기본생성자의 인자)라는 함수를 반드시 호출해주어야 합니다.


( this()는 기본 생성자의 속성을 상속받아 처리되는 형식이라고 생각하시면 됩니다. )


기본 생성자가 인자값을 받지 않을 때는 단순히 this()를 호출하고, 기본 생성자에 인자값을 넣었다면 this(인자값)으로 호출하면 됩니다.




여기서 this()는 함수로 자바에서 사용하던 멤버 변수를  참조할 때 사용하는 this와는 다릅니다.

( 코틀린에서도 멤버 변수를 참조할 때 사용하는 this가 존재합니다. )


class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var ani : Animal = Animal(1)
var ani2 : Animal = Animal(1,"반달가슴곰")
}
}


코틀린에서는 생성자에 기본 값을 적용할 수 있습니다. 기본값을 적용해 두면 클래스를 생성할 때 불필요한 인자값에 대해 설정하지 않아도 기본값이 적용되기 때문에 클래스를 유연하게 사용할 수 있습니다.


class Animal(type:Int=0) {

}



아래의 소스는 생성자에서 받는 인자값을 초기화한다든지 아니면 클래스에서 사용될 변수에 값을 대입하는 등 여러 경우를 위해서 생성자의 


함수 바디가 필요한 경우 사용하게되는 init{} 입니다.


class Animal(var type:Int?=0) {

init {

if(type==0) type =1
      

}

}




코틀린에서는 변수 선언만으로 자동으로 set/get을 생성해줍니다.


class Animal(var type:Int?=0) {

var type:Int = 1
var name:String = "사자"

}


위 코드와 같이 작성하였을때 


class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var ani : Animal = Animal(1)
ani.name="반달가슴곰"
}
}


이처럼 편리하게 사용할 수 있습니다.




참고 문헌 : 핵심 문법과 예제로 배우는 코틀린 ( 이난주 )

'Kotlin > kotlin 생성자' 카테고리의 다른 글

코틀린 생성자 (2)  (0) 2017.11.01