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 |