본문 바로가기
Back/Kotlin

[Kotlin] 생성자 개념 정리

by 은z 2025. 1. 22.

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는 추가적인 기능을 제공하기 때문에 특정 상황에서 훨씬 더 유용하다.

 

댓글