본문 바로가기
Programming Language/Kotlin

[코틀린 Kotlin] 클래스 정의 및 생성자 호출

by ggyongi 2021. 7. 5.
반응형

 

코틀린은 클래스를 정의할 때 동시에 생성자를 만들도록 할 수 있다.

다음 코드를 보자.

 

<생성자 자동 생성>

class Person(var name:String){
}

fun main() {
    var person1 = Person("Lee")
    println("person1의 이름은: ${person1.name}")
}


>> 출력
>> person1의 이름은: Lee

자바와는 다르게 코틀린은 클래스를 작성할 때 함수처럼 인자를 받을 수 있다.

위와 같이 클래스 객체 생성 시에 "Lee"라는 인자를 바로 넘겨주면 자동으로 생성자가 만들어지기 때문에

person1.name을 출력해보면 "Lee"가 할당되었음을 알 수 있다. 

 

 

참고:  init은 클래스 생성시 자동으로 실행되는 함수다.

class Person(var name:String){
    init {
        println("생성자 호출됨. 이름: $name")
    }
}

fun main() {
    var person1 = Person("Lee")

    println("person1의 이름은: ${person1.name}")
}

>> // 출력
>> 생성자 호출됨. 이름: Lee
>> person1의 이름은: Lee

 

 

<생성자 직접 생성>

자바처럼 생성자를 직접 작성할 수도 있다.

class Person{
    var name:String? = null
    var age:Int? = null
    constructor(){
    }
    constructor(_name:String?){
        this.name = _name
    }
    constructor(_name:String?, _age:Int?){
        this.name = _name
        this.age = _age
    }
}

fun main() {
    var person1 = Person()
    println("첫번째 사람 이름: ${person1.name} 나이: ${person1.age}")

    var person2 = Person("Kim")
    println("두번째 사람 이름: ${person2.name} 나이: ${person2.age}")

    var person3 = Person("Park", 20)
    println("세번째 사람 이름: ${person3.name} 나이: ${person3.age}")

}


// 출력
첫번째 사람 이름: null 나이: null
두번째 사람 이름: Kim 나이: null
세번째 사람 이름: Park 나이: 20

 

 

 

<생성자 자동 생성 + 생성자 직접 생성>

둘을 합쳐서 사용할 수도 있다. 단 이때는 constructor 뒤에 :을 붙이고 this(_name)을 추가시켜주어야 오류가 발생하지 않는다. 아래 코드의 결과를 보면

첫번째 사람은 생성자 자동생성을 사용했기 때문에 이름만 제대로 할당이 되었고

두번째 사람은 생성자 자동생성+직접생성을 사용했기 때문에 이름, 나이, 주소가 모두 할당되었다.

참고로 constructor 안에는 this.name = _name을 해줄 필요가 없다. 이미 생성자 생성 시 자동으로 할당되었기 때문이다. 

class Person(var name:String?){
    var age:Int? = null
    var address:String? = null

    constructor(_name:String?, _age:Int?, _address:String?):this(_name){
        this.age = _age
        this.address = _address
    }
}

fun main() {
    var person1 = Person("Kim")
    println("첫번째 사람 이름: ${person1.name} 나이: ${person1.age} 주소: ${person1.address}")

    var person2 = Person("Lee", 20, "Seoul")
    println("두번째 사람 이름: ${person2.name} 나이: ${person2.age} 주소: ${person2.address}")

}

// 출력
첫번째 사람 이름: Kim 나이: null 주소: null
두번째 사람 이름: Lee 나이: 20 주소: Seoul

 

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글