[Kotlin][8]코틀린 클래스 생성자 오버로딩 – constructor

반응형

    지난 포스팅에서 코틀린 클래스에 대해 알아보며 기본 생성자를 어떻게 생성하는지 클래스 변수를 어떻게 형성할 수 있는지 알아보았습니다. 클래스를 생성해 작업하다 보면 생성자를 중복해 형성해야 할 때가 있죠. 추가적인 매개변수를 받는 경우를 상정할 때 중복해 생성자를 형성하는 것이 생성자 오버 로딩이죠.

    코틀린에서 클래스 생성자 오버로딘
    코틀린에서 클래스 생성자 오버로딩

    생성자 오버 로딩은 보통 클래스 이름을 가진 생성자에 어떤 매개변수를 받는지를 통해 구분하죠. 코틀린도 크게 다르지는 않지만 기본 생성자와 오버로딩 생성자를 만드는 방법이 조금 다릅니다. 클래스 이름 바로 옆에 매개변수를 받고 Init 키워드를 통해 기본 생성자를 생성하고 constructor 키워드를 통해 생성자 오버로딩을 할 수 있죠. 어떤 방식으로 생성되는지 직접 보여드리겠습니다.

    코틀린 생성자 오버로딩 방법 - constructor

    코틀린에서의 생성자 오버로딩은 constructor 키워드를 이용해 가능합니다. Constructor을 클래스 몸체 부분에 적어준 뒤 해당 생성자가 받을 각종 변수들을 적어주면 되죠. 물론 기본 생성자와 같은 형태로 매개변수를 적어주면 안 됩니다. 생성자는 매개변수를 통해 구분하니 말이죠.

     

    생성자 키워드와 매개변수를 적어줬다면 이 클래스의 기본 생성자를 호출해줘야 합니다. 콜론[:]을 적은 뒤 this()와 같은 형태로 클래스의 기본 생성자를 호출해줄 수 있습니다. 오버로딩 생성자는 반드시 기본 생성자를 호출해줘야 합니다. 방금 설명드린 방법대로 생성자를 생성해보겠습니다.

    class Test() {
        init {
            println("이게 바로 기본 생성자 입니다")
        }
    
        constructor(num:Int) : this() {
            println("이건 생성자 $num 번 입니다.")
        }
    }

    생성자 오버로딩을 진행한 모습
    생성자 오버로딩을 진행한 모습

     위와 같이 생성자를 생성하고 실행하면 기본 생성자가 먼저 호출된 뒤 오버로딩 생성자가 호출됩니다. 실행해보면 아래와 같은 결과가 나옵니다.

    실행 콘솔
    실행 콘솔

    기본 생성자의 문장이 먼저 출력된 뒤 오버로딩 생성자가 출력되는 모습을 확인하실 수 있습니다.

     

    오버 로딩 생성자를 생성할 때 굳이 init 키워드를 통해 기본 생성자를 만들어주지 않아도 오버로딩 생성자에 this()만 적절히 호출해준다면 제대로 작동합니다.

    (컴파일러가 기본생성자를 적절히 생성해주기 때문입니다.)

     

    하지만 코틀린에선 기본 생성자를 사용하면 장점이 많기 때문에 특별한 경우가 아니라면 기본 생성자를 생성해주시기 바랍니다.

    기본 생성자가 매개변수를 받아야 한다면 constructor 키워드 뒤에 있는 기본 생성자 호출부에 오버 로딩 생성자의 변수들을 적절히 적어 넣어주면 됩니다. 이때 지난번에 설명드렸었던 생성자 매개변수를 통한 클래스 내부 변수 저장이 가능합니다. (오버로딩 생성자에서는 매개변수를 받자 마자 클래스 내부변수에 저장하는 것이 불가능합니다.)

    방금 설명드린 내용을 코딩한 내용입니다.

    class Test(number:Int) {
        init {
            println("이게 바로 기본 생성자 입니다. 그리고 전달받은 숫자 $number")
        }
    
        constructor(num:Int,text:String) : this(num) {
            println("이건 생성자 $text 입니다.")
        }
    }

    constructor을 통한 기본 생성자 호출
    constructor에서 기본 생성자 호출

    위 코드를 실행하면 constructor 오버로딩 생성자의 num 변수가 기본 생성자 number 변수로 전달됩니다. 이하는 위 코드를 실행한 내용입니다.

    기본 생성자에 매개변수가 전달된 모습
    기본 생성자에 매개변수가 전달된 모습

    기본 생성자의 숫자를 제대로 전달받는 모습을 확인할 수 있습니다.


    이렇게 오늘은 코틀린에서의 생성자 오버 로딩에 대해 적어보았습니다.

    다른 언어와 크게 다른 점이라면 constructor이라는 키워드를 통해 생성자를 형성한다는 점이겠죠.

    하지만 기본 생성자와 오버로딩 생성자에 확실한 차이를 둬 구별하기 쉽게 만들었다고 저는 생각합니다.

    클래스에 생성자가 여러 개일 경우 처음 생성했던 생성자가 무엇이었는지 확인하기 힘들어지는 경우가 있죠. 그럴 때 두드러지는 장점이라고 생각합니다.

    다음 포스팅에서는 간단히 데이터 클래스에 대해 알아보겠습니다.

    그럼 이번 포스팅은 여기에서 마치도록 하고 다음에 다른 내용으로 다시 찾아오도록 하겠습니다.

    긴 글 읽어 주셔서 감사합니다.


    이전 글 읽기

     


    이 글의 저작권은 전적으로 작성자인 P_Emblem에게 있으며
    허락 없는 사용을 금합니다.

    댓글

    Designed by JB FACTORY