프로그래밍/Kotlin

[코틀린 / Kotlin] 보조 생성자 활용하기

pupu91 2022. 10. 19. 19:14
반응형

 

주 생성자가 없는 클래스
: 주 생성자가 없으므로 this를 이용한 주 생성자 호출 불 필요
class MyClass{

    //보조 생성자 정의
    constructor(){
        println("보조 생성자(본인)만 호출")
    }

    //this()는 앞에서 정의한 보조 생성자를 호출
    constructor(arg: Int) : this(){
        println("다른 보조 생성자를 호출하며 매개변수도 호출($arg)")
    }
}

fun main(){
	
    var my1 = MyClass()
    var my2 = MyClass(123)
    
}

출력 결과
보조 생성자(본인)만 호출
보조 생성자(본인)만 호출
다른 보조 생성자를 호출하며 매개변수도 호출(123)

 

반응형

 

주 생성자가 존재하는 클래스
class MyClassWithPrimaryConstructor(){ //기본생성자 생성

    /* 보조 생성자를 정의할 때 주 생성자가 있는 경우 반드시 this를 통해 주 생성자를 호출해야 한다.*/
    constructor(arg: Int) : this(){
        println("주 생성자를 호출하며 매개변수도 호출($arg)")
    }

    constructor(arg1: Int, arg2: Int) : this(arg1){
        println("매개변수 두 개인 생성자 호출($arg1, $arg2)")
    }
}

fun main(){
	
    var my3 = MyClassWithPrimaryConstructor()
    var mv4 = MyClassWithPrimaryConstructor(111)
    var mv5 = MyClassWithPrimaryConstructor(333,222)

}

출력 결과
주 생성자를 호출하며 매개변수도 호출(111)
주 생성자를 호출하며 매개변수도 호출(333)
매개변수 두 개인 생성자 호출(333, 222)

 

 

 

보조 생성자를 활용한 예시
class Person5(var name: String, var age: Int, val gender: String){

    var job: String = "Unknown"
    var salary: Int? = null

    constructor(name: String, age: Int, gender: String, job: String) : this(name, age, gender){
        println("직업까지 정의하는 생성자 호출")
        this.job = job;

    }

    constructor(name: String, age: Int, gender: String, job: String, salary: Int) : this(name, age, gender, job){
                   println("직업과 연봉까지 정희하는 생성자 호출")
                   this.salary = salary // this.salary에 ()로 전달받은 값을 초기화한다.
    }

}

fun main(){

    var p5 = Person5("짱구", 32, "남성")
    println("${p5.name} ${p5.age} ${p5.gender} ${p5.job} ${p5.salary}")

     p5 = Person5("스폰지밥", 12, "남성", "요리사")
    println("${p5.name} ${p5.age} ${p5.gender} ${p5.job} ${p5.salary}")

     p5 = Person5("브레드숑", 321, "남성", "의사", 30000000)
    println("${p5.name} ${p5.age} ${p5.gender} ${p5.job} ${p5.salary}")
}

출력 결과
짱구 32 남성 Unknown null
직업까지 정의하는 생성자 호출
스폰지밥 12 남성 요리사 null
직업까지 정의하는 생성자 호출
직업과 연봉까지 정희하는 생성자 호출
브레드숑 321 남성 의사 30000000
반응형