0Pricing
Kotlin Academy · 강의

init 블록과 초기화 순서

init 블록을 사용하고 프로퍼티와 블록이 초기화되는 순서를 이해해 보세요.

init 블록과 초기화 순서은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

init 블록이란

init { } 블록에는 인스턴스가 생성될 때 실행되는 코드가 들어갑니다. 기본 생성자 로직의 일부입니다.

간단한 init 블록

init 블록은 소스 코드 순서에 따라 프로퍼티 초기화 식이 실행된 후 생성 과정에서 실행됩니다.

class Logger(val name: String) {
    init {
        println("Constructed Logger("$name")")
    }
}
fun main() {
    val l = Logger("auth")
}

init에서 검증하기

생성 시점에 불변 조건을 적용하려면 init 내부에서 require / check를 사용하십시오.

class Percentage(val value: Int) {
    init {
        require(value in 0..100) { "value must be 0..100, was $value" }
    }
}
fun main() {
    println(Percentage(75).value)
    // Percentage(150) // throws IllegalArgumentException
}

여러 init 블록

여러 init 블록을 작성할 수 있습니다. 프로퍼티 초기화 식과 섞여 소스 코드에 나타난 순서대로 실행됩니다.

class Demo(val x: Int) {
    init { println("First init, x=$x") }
    val doubled = x * 2
    init { println("Second init, doubled=$doubled") }
}
fun main() {
    Demo(5)
}

프로퍼티 초기화와 init 순서

프로퍼티 초기화 식과 init 블록은 소스 코드에 나타난 순서대로 위에서 아래로 실행됩니다. 프로퍼티는 사용하기 전에 할당되어야 합니다.

class Order {
    val createdAt = System.currentTimeMillis()
    init { println("created at $createdAt") }
    val nextId = 1
    init { println("next id = $nextId") }
}
fun main() {
    Order()
}

초기화 전에는 프로퍼티를 사용할 수 없습니다

초기화 식이 실행되기 전에 프로퍼티를 참조하면 컴파일 오류가 발생합니다.

class Bad {
    init {
        // println(name) // ERROR: name not yet initialized
    }
    val name = "after init"
}
fun main() { Bad() }

파생 프로퍼티 계산하기

여러 생성자 매개변수에 의존하는 파생 상태를 계산하려면 init 블록을 사용하십시오.

class Rectangle(val width: Int, val height: Int) {
    val area: Int
    init {
        area = width * height
    }
}
fun main() {
    val r = Rectangle(4, 5)
    println("area = ${r.area}") // 20
}

부수 효과: 로깅

로깅, 할당 또는 등록과 같은 복잡한 설정에는 init을 사용하십시오.

class Service(val name: String) {
    init {
        println("[BOOT] starting service '$name'")
    }
}
fun main() {
    Service("auth")
    Service("payments")
}

하위 클래스의 init 순서

상위 클래스의 init이 하위 클래스의 init보다 먼저 실행됩니다. 각 클래스의 프로퍼티는 해당 클래스의 소스 코드 순서대로 초기화됩니다.

open class Base {
    init { println("Base init") }
}
class Sub : Base() {
    init { println("Sub init") }
}
fun main() { Sub() }

init에서 무거운 로직 피하기

오래 실행되는 init 블록은 모든 객체 생성을 느리게 합니다. 설정 비용이 크다면 지연 초기화나 팩토리 메서드를 고려하십시오.

class Heavy(val n: Int) {
    val data: List<Int> by lazy { (1..n).toList() }
}
fun main() {
    val h = Heavy(1_000_000)
    println("Created without computing data")
    println("First element: ${h.data[0]}") // now data initializes
}

init과 보조 생성자 결합하기

보조 생성자는 기본 생성자에 위임하며, init 블록은 기본 생성자 경로의 일부로 실행됩니다.

class Box(val content: String) {
    init { println("init for '$content'") }
    constructor(): this("empty") { println("secondary done") }
}
fun main() {
    Box()
}

빠른 확인

Kotlin 클래스에서 여러 init 블록과 프로퍼티 초기화 식은 어떤 순서로 실행될까요?

복습

init 블록에는 생성 시점의 로직이 들어갑니다. 검증, 파생 프로퍼티 계산, 부수 효과 등이 여기에 해당합니다. 여러 블록은 프로퍼티 초기화 식과 섞여 소스 코드 순서대로 실행됩니다. init에서 무거운 작업은 피하고 대신 lazy나 팩토리 메서드를 사용하십시오.

자주 묻는 질문

“init 블록과 초기화 순서” 강의는 무료인가요?

네 — “init 블록과 초기화 순서” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“init 블록과 초기화 순서”에서 뭘 배우나요?

init 블록을 사용하고 프로퍼티와 블록이 초기화되는 순서를 이해해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“init 블록과 초기화 순서” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 기본 생성자와 프로퍼티 매개변수
  2. init 블록과 초기화 순서
  3. field를 사용한 사용자 지정 게터와 세터
  4. lateinit과 지연 초기화
← Kotlin Academy(으)로 돌아가기