주 생성자(Primary Constructor)
- 클래스 이름 뒤에 오는 괄호로 둘러싸인 코드를 주 생성자라고 함
- 생성자 인자 지정
- 인자에 의해 초기화되는 프로퍼티를 정의할 때 사용
주 생성자의 명시적 선언
class User(_nickname: String) {
val nickname: String
init {
nickname = _nickname
}
}
- init 키워드로 초기화 블럭을 시작한다.
- 객체가 생성될 때 실행된다.
주 생성자의 간결한 선언
class User(val nickname: String)
- val 키워드를 생성자 파라미터 앞에 추가함으로 프로퍼티 정의하고 초기화 가능
- 프로퍼티 정의와 초기화를 한 줄로 간략하게 표현한다.
생성자 인자 디폴트값
class User(val nickname: String, val isSubscribed: Boolean = true)
- isSubscribed 에 디폴트값 설정가능
인스턴스 생성
fun main() {
val hyun = User("현석")
println(hyun.isSubscribed) // 출력: true
val gye = User("계영", false)
println(gye.isSubscribed) // 출력: false
val hey = User("혜원", isSubscribed = false)
println(hey.isSubscribed) // 출력: false
}
class User(val nickname: String, val isSubscribed: Boolean = true)
기반 클래스의 초기화
open class User(val nickname: String) { /*...*/ }
class TwitterUser(nickname: String) : User(nickname) { /*...*/ }
- 기반 클래스가 있는 경우
- 주 생성자에서 기반 클래스의 생성자를 넣어서 호출해야함.
- 생성자 인자는 클래스 이름 뒤에 괄호 안에 넣어 전달한다.
디폴트 생성자
open class Button // 인자가 없는 디폴트 생성자가 만들어진다.
하위 클래스의 생성자 호출
fun main() {
val user = TwitterUser("ipeac")
user.getNickname()
println(user.isSubscribed)
}
open class User(val nickname: String, val isSubscribed: Boolean = true)
class TwitterUser(nickname: String) : User(nickname) {
fun getNickname() {
println(nickname)
}
}
class TwitterUser(nickname: String) : User(nickname) {
- 처럼 기반 클래스의 생성자를 호출해야 사용이 가능함.
- 자바에서의 Super 의 개념같음.
Uploaded by N2T
'코틀린 > 코틀린인액션' 카테고리의 다른 글
[코틀린 인 액션] 4.2.2 __부 생성자: 상위 클래스를 다른 방식으로 초기화__ (0) | 2024.03.04 |
---|---|
[코틀린 인 액션] 4.2.3 인터페이스에 선언된 프로퍼티 구현 (0) | 2024.03.04 |
[KOTLIN] 봉인된 클래스(sealed class) : 클래스 계층의 확장 제한 (0) | 2024.02.19 |
[KOTLIN] 클래스 계층 정의 (0) | 2024.02.09 |
[KOTLIN] 로컬 함수와 확장 (0) | 2024.02.09 |