본문 바로가기
Languages/Kotlin

[Kotlin] 클래스와 생성자(Class, Constructor)

by jbrochan 2023. 3. 28.

클래스(Class)

코틀린에서 클래스는 class 키워드를 사용하며 클래스 이름, 해더, 바디로 구성되며 다음과 같은 특징을 지닌다.

또한, 클래스의 해더와 바디는 생략이 가능하다.

클래스는 객체를 생성해 사용하지만 코틀린의 클래스는 객체를 생성할 때 new 키워드를 사용하지 않는다.

 


생성자(Constructor)

코틀린의 클래스는 하나의 주 생성자(primary constructor) 와 하나 이상의 보조 생성자(secondary constructor)를 가질 수 있다.

주 생성자(Primary constructor)

주 생성자는 constructor 키워드를 사용하지만, 이를 생략하고 사용할 수 있다.

또한, 필요하다면 매개변수를 선언할 수도 있다.

// constructor 키워드를 사용한 class
class Person constructor(firstName: String) {
    // body
}

// constructor 키워드를 생략한 class
class Person(firstName: String){
    // body
}

 

 

주 생성자 내부에는 어떠한 코드도 들어갈 수 없지만, init 키워드를 이용해서 초기화 코드를 작성할 수 있다.

init 키워드로 작성한 영역은 클래스의 객체를 생성할 때 자동으로 실행되며, init 영역의 작성은 필수사항은 아니다.

class Person(firstName: String){
    init {
        println("Initialization code")
    }
}

생성자의 매개변수를 클래스의 멤버 변수로 선언하고 싶은 경우에는

  • init 블록에서 매개변수를 멤버변수에 대입하면 가능하다.
  • var, val 키워드를 매개변수 선언 시 붙여주면 가능하다.
// init 블록을 통해서 선언하는 법
class Person(firstName: String){
    val firstName: String    // 멤버 변수
    init{
        this.firstName = firstName    // 매개변수를 멤버 변수에 대입
}

// val 키워드를 이용하여 선언하는 법 
class Person2(val firstName: String){
    // body
}

보조 생성자(Secondary constructor)

보조 생성자는 클래스 본문에 constructor 키워드로 선언할 수 있으며 여러 개를 추가할 수 있다.

기본적으로 보조 생성자또한 생성자이기 때문에 객체 생성시 자동으로 실행되게 된다.

보조 생성자나 주 생성자 둘 중 하나만 선언 하면 상관 없지만, 모두 선언하게 된다면 생성자끼리 연결이 필요하다.

연결시에는 this() 구문을 이용하면 된다.

 

class Person(name: String){
    constructor(name: String, count: Int): this(name){
    
    }
 }
 fun main(){
     val user = User("Tom", 10)
 }

 

댓글