본문 바로가기
Android/안드로이드 스터디(Kotlin)

Kotlin] 9. 생성자

by 김마리님 2020. 12. 7.

기존 자바의 경우는 클래스를 만들고, 내부에 같은 이름을 가진 클래스를 하나 더 만들어야 생성자의 임의선언이 가능했다. 그러나 코틀린은 간결함을 요구하는 언어이므로 그렇게 거추장스러운 방법을 쓰지 않는다.. 굳이 클래스 이름을 다 적을 필요 없이 init 명령어 하나면 모든게 끝난다 쩔지.

 

다음 코드는 클래스를 호출할 때 받아온 매개변수로 동시에 초기화 시키는 코드이다.

init으로 생성자를 선언한 후에.. 그냥 그 매개변수를 등치시켜 초기화 하면 된다. 진짜 간편하지 않은가(!)

fun main(args: Array<String>): Unit {

    val person = Person("홍길동", 30)
    println("이름 : ${person.name}")
    println("나이 : ${person.age}")
}

class Person constructor(name: String, age: Int) {
    val name : String
    val age : Int

    init {
        this.name = name
        this.age = age
    }
}


 

결과 : 

 

이름 : 홍길동
나이 : 30

 


 

또, init을 나눌수도 있다. (자바 개발자 대박 신기해함)

import `object`.Person

fun main(args: Array<String>): Unit {

    val person = Person("홍길동", 30)
    println("이름 : ${person.name}")
    println("나이 : ${person.age}")
}

class Person constructor(name: String, age: Int) {
    val name : String
    val age : Int

    init {
        this.name = name

    }

    init {
        this.age = age

    }
}

 

이 때, 초기화는 위에서부터 아래로 초기화 되므로, 초기화된 변수를 이용한 결과값으로 특정 초기화해야한다면

초기화된 변수를 먼저 선언하고, 그 결과값을 초기화하는 변수를 다음에 선언해야한다. 

    val single : Int
    val double : Int
    
    init {
        this.single = single

    }

    init {
        this.double = single*2 

    }

 


 

근데 이거보다 더 간단하게 선언할 수 있는 방법이 있는데,

class Person(val name : String, val age : Int)

 

이 한 줄로도 간단하게 생성자를 만들어 초기화 할 수 있다.

 


 

또, 보조생성자를 여러개 만들어 여러개의 인수를 받을 수도 있다.

 

fun main(args: Array<String>): Unit {
    println("${Time(5).second} 초")
    println("${Time(15,6).second} 초")
    println("${Time(6,3,17).second} 초")
}

class Time(val second: Int) {
    init {
        println("주 생성자 동작")
    }

    //보조생성자1
    constructor(minute: Int, second: Int) : this(minute * 60 + second) {
        println("보조 생성자 1동작")
    }

    //보조생성자2
    constructor(hour: Int, minute: Int, second: Int) : this(hour + 60 + minute, second) {
        println("보조 생성자 2동작")
    }
}

 

먼저 결과부터 본다.

 

결과 :

 

주 생성자 동작
5 초
주 생성자 동작
보조 생성자 1동작
906 초
주 생성자 동작
보조 생성자 1동작
보조 생성자 2동작
4157 초

Process finished with exit code 0

 

아까, 생성자를 여러개로 만들면 위에서 아래로 순차적으로 움직인다고 했다.

여기서도 보다시피, 아래를 타고 내려온다.

즉, 주생성자 내부 값이 있고, 그 이후에 보조생성자에서 this를 호출하면 주생성자가 있는 생성자를 먼저 호출하고, 다음 그 생성자에 추가로 보조생성자를 붙이는 형태로 보조생성자가 동작한다.

반응형

'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글

Kotlin] 11. 연산자 오버로딩  (0) 2020.12.07
Kotlin] 10. getter, setter  (0) 2020.12.07
Kotlin] 8. 객체  (0) 2020.12.04
Kotlin] 7. 가변인수  (0) 2020.12.04
Kotlin] 6. 디폴트 인수  (0) 2020.12.04