1. 생성자 종류
- 코틀린에서의 생성자는 크게 두 종류로 나뉜다.
1) 주 생성자 (Primary Constructor)
- 클래스 헤더에 선언되는 기본 생성자이다.
- 매개변수에 var 또는 val을 사용하면 자동으로 클래스 프로퍼티가 생성된다.
- init 블록과 함께 초기화 로직을 작성할 수 있다.
class Member(var name: String, var age: Int = 10) {
init {
println("Initialized with name=$name, age=$age")
}
}
2) 부 생성자 (Secondary Constructor)
- constructor 키워드를 사용하여 정의한다.
- 주 생성자를 반드시 호출해야 한다.
class Member(var name: String, var age: Int) {
constructor() : this("Unknown", 10) // 주 생성자를 호출
}
2. var와 val의 의미
- var: 클래스 프로퍼티로 선언되어 Getter와 Setter가 자동으로 생성.
- val: 읽기 전용 프로퍼티로 선언되며, Getter만 생성.
class Member(val name: String, var age: Int)
// 자동 생성된 Getter/Setter
val member = Member("Alice", 25)
println(member.name) // Getter 호출
member.age = 30 // Setter 호출
3. 기본 생성자 (No-Arg Constructor)
기본 생성자란?
- 매개변수가 없는 생성자를 의미한다.
- Kotlin은 매개변수가 있는 주 생성자를 정의하면 기본 생성자를 자동으로 제공하지 않는다.
기본 생성자를 제공하려면?
1)추가 생성자 정의
class Member(var name: String, var age: Int) {
constructor() : this("Unknown", 10)
}
2)기본 값 활용
class Member(var name: String = "Unknown", var age: Int = 10)
val member = Member() // name="Unknown", age=10
3)Lombok의 @NoArgsConstructor 사용 (Java와의 상호 운용성)
- Java 라이브러리와 함께 사용할 경우, @NoArgsConstructor를 통해 기본 생성자를 추가 가능
@NoArgsConstructor
class Member(var name: String, var age: Int)
4. 생성자 관련 질문
Q: 주 생성자에서 var나 val 없이 매개변수를 선언하면?
A: 클래스의 프로퍼티가 생성되지 않고, 매개변수는 로컬 변수로만 사용된다.
class Member(name: String) {
// name은 로컬 변수이며, 클래스 프로퍼티가 아님
}
Q. 주 생성자에 var 입력시 자동 생성되는 Getter/Setter가 있는데 뭐하러 data class를 쓸까?
A. Kotlin에서는 일반 클래스의 주 생성자에 var나 val을 선언하면 자동으로 Getter와 Setter가 생성되지만, data class는 추가적인 기능을 제공하기 때문에 특정 상황에서 훨씬 더 유용하다.
댓글