[KOTLIN] 클래스 초기화 : 주 생성자와 초기화 블럭

주 생성자(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