이글은 유튜브 강좌 <디모의 코틀린> 강좌를 보고 요약작성한 글 입니다.
https://www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN
강좌를 보고 싶은 분은 위 링크를 통해 공부하실수 있습니다.
7장 클래스에서 사실 코틀린의 생성자에 대해 미리 보여준 적이 있다.
파란색의 글씨들이 보이는가?
이것은 클래스의 '속성'들을 선언함과 동시에 '생성자' 역시 선언하는 방법이다.
새로운 객체를 만들기 위한 특수한 함수이다.
코드로 확인해보자.
fun main() {
var park = Person("박보영", 1990)
var jun = Person("전정국", 1997)
var jang = Person("장원영", 2004)
}
class Person (var name:String, val birthYear:Int){
init{ // init 함수
println ("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
}
}
결과 :
1990년생 박보영님이 생성되었습니다.
1997년생 전정국님이 생성되었습니다.
2004년생 장원영님이 생성되었습니다.
여기서 this 는 객체 자기자신의 속성이나 함수를 호출하기 위해, 클래스 내부에서 사용되는 키워드 이다.
ex) 박보영을 만들어내는 중에, Person 클래스 내부에서 this.birthYear = "1990" , this.name = "박보영"
var park = Person("박보영", 1990)
var jun = Person("전정국", 1997)
var jang = Person("장원영", 2004)
그런데 만약 100명의 Person 객체를 생성하는데, 90명이 1997년 생이면
var park = Person("고민시", 1997)
var park = Person("한소희", 1997)
var park = Person("김고은", 1997)
이렇게 계속 1997 적으면서 90번의 코드작성을 한다고 생각하면.... 엄청 낭비적이다.
이럴때 보조생성자 가 필요하다.
기본생성자 : 객체가 생성될때 기본으로 선언
보조생성자 : 필요에 따라 선언
코드를 통해 확인해보자.
fun main() {
var park = Person("박보영", 1990)
var jun = Person("전정국", 1997)
var jang = Person("장원영", 2004)
println ("--줄바꿈--")
var iruda = Person("이루다")
var cha = Person("차은우")
var rue = Person("류수정")
}
class Person (var name:String, val birthYear:Int){
init{
println ("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
}
constructor(name:String) : this(name,1997){ // 보조생성자
println ("보조생성자가 사용되었습니다.")
}
}
결과값
1990년생 박보영님이 생성되었습니다.
1997년생 전정국님이 생성되었습니다.
2004년생 장원영님이 생성되었습니다.
--줄바꿈--
1997년생 이루다님이 생성되었습니다.
보조생성자가 사용되었습니다.
1997년생 차은우님이 생성되었습니다.
보조생성자가 사용되었습니다.
1997년생 류수정님이 생성되었습니다.
보조생성자가 사용되었습니다.
보조생성자(constructor)를 통해 (이루다,차은우,류수정) 객체가 생성되는데, 알아야 할것이 있다.
1. 기본 생성자의 코드가 먼저 실행되고 나서,
2. 보조생성자의 코드가 실행된다는 점이다.