코드를 느껴바라

kotlin : 클래스(Class)의 생성자 본문

개발/앱(Android)

kotlin : 클래스(Class)의 생성자

feelTheCode 2025. 4. 20. 21:18
반응형

Kotlin 클래스 초기화의에는 여러 방법이 존재한다.

Kotlin에서는 클래스 초기화를 위해 constructor, init, secondary constructor를 유연하게 조합할 수 있다. 각각의 개념을 명확히 이해하고 올바르게 사용하는 것이 유지보수성과 가독성을 높이는 데 도움이 된다고 하여 정리하여 포스팅을 해본다.


1. 주 생성자 (Primary Constructor)

Kotlin의 주 생성자는 클래스 선언부에서 함께 정의된다. 값을 객체 외부에서 전달받아 클래스 내부 프로퍼티로 초기화하는 데 사용된다.

class Person(val name: String, val age: Int)
  • val 혹은 var 키워드를 사용하면 자동으로 프로퍼티가 정의된다.
  • constructor 키워드는 생략 가능하다.

명시적으로 작성할 수도 있다:

class Person constructor(val name: String, val age: Int)

2. 초기화 블록 (init)

init 블록은 객체가 생성되자마자 실행되는 블록이다. 주 생성자에서 받은 값을 바탕으로 로직을 추가하거나 초기화 작업을 수행할 수 있다.

class Person(val name: String, val age: Int) {
    init {
        println("init 블록 실행: 이름은 $name, 나이는 $age")
    }
}

특징

  • 생성자 파라미터에 접근 가능
  • 클래스 내부에 여러 개의 init 블록을 둘 수도 있으며, 위에서 아래 순서대로 실행된다.

3. 보조 생성자 (Secondary Constructor)

주 생성자 외에도 보조 생성자를 통해 다양한 방식으로 객체를 생성할 수 있다. constructor 키워드를 사용해서 클래스 본문 내부에 정의한다.

class Person {
    var name: String
    var age: Int

    constructor(name: String, age: Int) {
        this.name = name
        this.age = age
    }
}

주 생성자와 병행 사용

보조 생성자가 정의된 경우에는 반드시 주 생성자를 호출해야 한다.

class Person(val name: String) {
    var age: Int = 0

    constructor(name: String, age: Int) : this(name) {
        this.age = age
    }
}

4. 실행 순서 요약

class Example(val data: String) {
    init {
        println("init 블록: $data")
    }

    constructor(data: String, extra: String) : this(data) {
        println("보조 생성자 실행: $extra")
    }
}

val ex = Example("hello", "extra")
출력:
init 블록: hello
보조 생성자 실행: extra
  1. 주 생성자 실행
  2. init 블록 실행
  3. 보조 생성자 실행

5. 정리 비교표

항목 설명

constructor 외부에서 값을 받아오는 생성자 정의 방법
init 블록 생성 직후 초기화 로직을 수행하는 블록
보조 생성자 주 생성자 외의 추가 생성자, 반드시 주 생성자 호출 필요
선언 위치 constructor는 선언부, init은 클래스 본문 내부
매개변수 전달 constructor만 가능, init은 전달된 값만 사용 가능
사용 용도 파라미터 설정, 유효성 검사, 로그 출력 등

마무리

Kotlin은 Java보다 훨씬 더 간결하고 유연하게 객체를 초기화할 수 있도록 설계되었다. init, primary constructor, secondary constructor의 역할을 명확히 구분하고 목적에 맞게 사용하는 것이 중요하다.

반응형

'개발 > 앱(Android)' 카테고리의 다른 글

kotlin : Sequence 뭐가 다르고 왜 쓰는 건지?  (0) 2025.04.17
kotlin : field란?  (5) 2025.03.20
kotlin : 코틀린 변수 및 상수  (0) 2025.03.13