728x90
생성자
- 기본 생성자와 명시적 생성자가 존재
- 기본 생성자는 이전까지 클래스를 만들던 행위와 차이가 없음
- 명시적 생성자는 주 생성자와 부 생성자로 구분할 수 있음 // Init (주 생성자), Constructor (부 생성자)
주생성자의 예시
fun main() {
val people1 = People("사람1", 10, 100.0, 30.0)
println(people1.name) //주생성자
//사람1
people1.run() // 뛴다.
}
class People(_name: String, _age: Int, _height: Double, _weight: Double) {
var name = ""
var age = 0
var height = 0.0
var weight = 0.0
init { //생성시 프로퍼티 초기화
println("주생성자")
name = _name
age = _age
height = _height
weight = _weight
}
fun run() {
println("뛴다.")
}
}
또는
fun main() {
val people1 = People("사람1", 10, 100.0, 30.0)
println(people1.name) //주생성자
//사람1
people1.run() // 뛴다.
}
class People(val name: String,val age: Int, val height: Double,val weight: Double) {
init { //생성시 프로퍼티 초기화
println("주생성자")
}
fun run() {
println("뛴다.")
}
}
val 키워드를 붙여주면 생성과 동시에 초기화 작업을 할 수 있음
부생성자
fun main() {
val people1 = People("사람1", 10, 100.0, 30.0)
// gender 없는 생성자
// 이름 : 사람1
// 나이 : 10
// 몸무게 : 100.0
// 키 : 30.0
val people2 = People("사람2", 20, 160.3, 56.7, "남자")
// gender 있는 생성자
// 이름 : 사람2
// 나이 : 20
// 몸무게 : 160.3
// 키 : 56.7
// 성별: 남자
}
class People {
var name = ""
var age = 0
var weight = 0.0
var height = 0.0
var gender = ""
constructor(_name: String, _age: Int, _weight: Double, _height: Double) {
println("gender 없는 생성자")
println("이름 : $_name")
println("나이 : $_age")
println("몸무게 : $_weight")
println("키 : $_height")
}
constructor(_name: String, _age: Int, _weight: Double, _height: Double, _gender: String) {
println("gender 있는 생성자")
println("이름 : $_name")
println("나이 : $_age")
println("몸무게 : $_weight")
println("키 : $_height")
println("성별: $_gender")
}
}
주생성자와 부생성자의 차이
- 한 가지의 형태로 클래스를 실체화할때는 주 생성자를 활용할 수 있다.
- 항상 <이름, 나이,몸무게,키>만 생성자에서 최초로 코드를 실행할 때는 주 생성자를 사용한다.
- 여러 형태로 클래스를 실체화할때는 보조 생성자(부생성자)를 활용할 수 있다.
- <이름, 나이,몸무게> 또는 < 이름, 나이,몸무게,키,성별> 처럼 여러개의 생성자를 통해 최초로 코드를 실행할 때는 부 생성자를 이용한다.
만약, 100명의 사람의 인스턴스를 만든다고 했을 때, 절반의 사람이 1995년생 이라면?
보조 생성자를 이용해서 코드량을 줄일 수도 있다.
fun main() {
val a = People("김",1990) //init 실행: 이름은 : 김 , 출생년도는 : 1990 입니다.
val b = People("이",1980) //init 실행: 이름은 : 이 , 출생년도는 : 1980 입니다.
val c = People("박",1995) //init 실행: 이름은 : 박 , 출생년도는 : 1995 입니다.
val d = People("최") /*init 실행: 이름은 : 최 , 출생년도는 : 1995 입니다.
보조 생성자 생성 :이름 : 최 , 출생년 : 1995 */
val e = People("강") /*init 실행: 이름은 : 강 , 출생년도는 : 1995 입니다.
보조 생성자 생성 :이름 : 강 , 출생년 : 1995 */
val f = People("문") /*init 실행: 이름은 : 문 , 출생년도는 : 1995 입니다.
보조 생성자 생성 :이름 : 문 , 출생년 : 1995 */
}
class People(val name: String, val birthYear: Int){
init {
print("init 실행: ")
println("이름은 : $name , 출생년도는 : $birthYear 입니다.")
}
constructor(name: String) :this(name,birthYear = 1995){
print("보조 생성자 생성 :")
println("이름 : $name , 출생년 : $birthYear")
}
}