생성자
코틀린에서 생성자는 클래스를 초기화할 때 호출되는 특수한 함수입니다. 생성자는 주 생성자(primary constructor)와 부 생성자(secondary constructor)로 나뉩니다. 주 생성자는 클래스 헤더 부분에 정의되며, 부 생성자는 클래스 본문 내에 정의됩니다.
주 생성자(primary constructor)
// 첫 번째 방식
class Person(name: String, age: Int) {
val name : String
var age : Int
init {
this.name = name
this.age = age
}
// 두 번째 방식
class Person(name: String, age: Int) {
val name = name
var age = age
}
// 세 번째 방식
class Person(val name: String, var age: Int)
주 생성자를 생성하는 방법에는 3가지가 존재합니다.
첫 번째로는 매개변수를 받아 클래스 안에 프로퍼티에 init 을 사용해서 초기화해주는 방식입니다.
두 번째로는 init을 생략하고 프로퍼티를 바로 매개변수로 대입해서 초기화해주는 방식입니다.
세 번째로는 매개변수에 var 혹은 val을 선언해서 매개변수를 프로퍼티로 사용하는 방식입니다.
보조 생성자(secondary constructor)
class Person(name: String) {
var age: Int = 0
var name : String
// 주 생성자
init {
this.name = name
}
// 보조 생성자
constructor(name: String, age: Int) : this(name) {
this.age = age
}
}
fun main() {
val person1 = Person("Alice")
val person2 = Person("Bob", 30)
println("Person1: Name = ${person1.name}, Age = ${person1.age}")
println("Person2: Name = ${person2.name}, Age = ${person2.age}")
}
val person1 에서 Alice 이름 하나의 매개변수만이 Person 클래스에 전해지기 때문에 주 생성자를 통해 초기화 됩니다.
따라서 person1을 출력하면 name은 Alice 나이는 0으로 출력되게 됩니다.
하지만 person2의 경우 보조 생성자를 사용하게 됩니다.
보조 생성자를 생성할 때는 constructor을 사용합니다.
person2에서 Bob과 30을 받게 되면 보조 생성자로 매개변수가 이동하게 됩니다. 여기에 : this(name)이 존재하기 때문에 Bob은 주생성자로 이동하게 되어 Person(name: String)으로 전달되게 됩니다. 그럼 init 주 생성자가 실행되어 name에 Bob으로 초기화가 됩니다.
그러고 다시 보조 생성자로 돌아와서 age는 30으로 초기화되게 됩니다. 출력하면 name은 Bob 이고 age는 30으로 출력됩니다.
정리하면
1. 객체 변수를 초기화하기 위해 생성자로 이동
2. this(name)이 존재하기 때문에 주 생성자로 이동
3. 주 생성자로 name은 Bob으로 초기화
4. 보조 생성자를 실행하여 age는 30으로 초기화
출처
W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
Classes | Kotlin
kotlinlang.org
'개발 언어 (Language) > Kotlin & Android' 카테고리의 다른 글
코틀린에서의 상속 (0) | 2024.07.29 |
---|---|
코틀린에서의 멤버함수(클래스 함수) (0) | 2024.07.29 |
코틀린에서의 객체 지향 (0) | 2024.07.29 |
코틀린에서의 함수 (0) | 2024.07.28 |
코틀린에서의 배열 (0) | 2024.07.28 |