Develop!/Kotlin

생성자 in kotlin

체리필터 2023. 7. 27. 14:54
728x90
반응형

Kotlin에서 생성자는 Class의 이름과 소괄호만 적어 주면 된다. Java 처럼 new를 적지 않아도 된다.

class Wombat {
}

fun main() {
    val wombat = Wombat()
}

생성자에 파라미터를 전달할 수도 있다.

class Alien(name: String) {
    val greeting = "Poot $name"
}

fun main() {
    val alien = Alien("Mr. Meeseeks")
    println(alien.greeting)
}

파라미터 name은 생성자 밖에서는 접근할 수 없다.

생성자 밖에서도 접근이 가능하려면 var or val을 붙여주면 된다.

class MutableNameAlien(var name: String) {
    fun printName() {
        println(name)
    }
}
class FixedNameAlien(val name: String)

fun main() {
    val alien1 = MutableNameAlien("Reverse Giraffe")
    val alien2 = FixedNameAlien("Krombopolis Michael")

    alien1.printName()
    alien1.name = "Parasite"
    alien1.printName()

    println(alien2.name)
}

두 개의 클래스를 만들고 파라미터로 var, val을 사용하여 값을 전달 했다.

이렇게 될 경우 MutableNameAlien의 name 파라미터와, FixedNameAlien의 name 파라미터에 접근이 가능하다.

다만 var로 선언한 경우에는 값을 재 할당할 수 있는 점만 다르다.

여러개의 파라미터가 있는 생성자도 만들 수 있다.

class MultipleArgs(val name: String, val eyes: Int, val hands: Int, val legs: Int) {
    fun describe() = "$name with $eyes eyes, $hands hands and $legs legs"
}

fun main() {
    val kevin = MultipleArgs("Zigerion", 2, 2, 2)
    println(kevin.describe())
    println(kevin.toString())
}

describe 함수에서는 정의 된 포맷대로 파라미터 전체를 출력했다.

하지만 toString에는 클래스명과 인스턴스의 주소를 찍게 된다. 안의 내용이 무엇인지 보여주는 내용으로 toString을 바꾸기 위해서는 toString을 재정의 하면 된다. Java에서 @Override 라는 어노테이션과 비슷하게 작성하면 된다.

class MultipleArgs(val name: String, val eyes: Int, val hands: Int, val legs: Int) {
    fun describe() = "$name with $eyes eyes, $hands hands and $legs legs"
    override fun toString(): String {
        return "$name with $eyes eyes, $hands hands and $legs legs"
    }
}

fun main() {
    val kevin = MultipleArgs("Zigerion", 2, 2, 2)
    println(kevin.describe())
    println(kevin.toString())
}

 

 

 

728x90
반응형

'Develop! > Kotlin' 카테고리의 다른 글

가변인자 목록 in Kotlin  (0) 2023.08.02
list int kotlin  (0) 2023.07.31
'in' in kotlin  (0) 2023.07.26
for loop in kotlin  (0) 2023.07.21
String Template in Kotlin  (0) 2023.07.19