[Kotlin] 9. 클래스의 생성자

오도원공육사·2021년 5월 25일
0

코틀린 기초문법

목록 보기
9/13

이전 챕터에서 클래스를 선언할 때 class Person 옆에 괄호안에 속성들을 나열했었다. 그것이 생성자이다.

1. 생성자

  • 새로운 인스턴스를 생성하기 위해 호출하는 특수한 함수
  • 생성자를 호출하면 인스턴스를 만들어 반환받는다.

1-1. 기능

  • 인스턴스 속성 초기화
  • 인스턴스 생성시 필요한 구문 수행 → init() 함수를 통해 가능

init

  • 파라미터, 반환형이 없다.
  • 생성자를 통해 인스턴스가 만들어질 때 호출되는 특수한 함수.
  • this : 인스턴스 자기자신을 가리키기 위해서 클래스 내부에서 사용되는 키워드
fun main() {
    var a = Person("박보영", 1990)
    var b = Person("전정국", 1997)
    var c = Person("장원영", 2004)
    
}

class Person(var name:String, val birthYear:Int) {
    init{
        println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
    }
}
// 결과
1990년생 박보영님이 생성되었습니다.
1997년생 전정국님이 생성되었습니다.
2004년생 장원영님이 생성되었습니다.

1-2.기본 생성자

100명의 인스턴스를 만드는데 그 중 90명이 1997년생이라면? 이때 기본 생성자를 사용할 수 있다.

  • 클래스를 만들 때 기본으로 선언

1-3. 보조 생성자(secondary constructor)

기본 생성자와 다른 형태의 생성자를 제공하여 인스턴스 생성 시 편의를 제공하거나 추가적인 구문을 수행하는 기능이다.

  • 필요에 따라 추가적으로 선언
  • 보조 생성자는 constructor 키워드를 사용한다.
  • 보조 생성자를 사용할 때는 반드시 기본 생성자를 통해 속성을 초기화해야한다.

예시.

  • 이름만 받는 보조 생성자를 만들어보자.
  • 보조 생성자로 기본 생성자를 호출하기 위해서는 콜론(:)을 붙인 후 this 키워드를 사용해서 기본 생성자의 파라미터를 괄호안에 넣어준다.
fun main() {
    var a = Person("박보영", 1990)
    var b = Person("전정국", 1997)
    var c = Person("장원영", 2004)
    
    var d = Person("이루다")
    var e = Person("차은우")
    var f = Person("류수정")
    
}

class Person(var name:String, val birthYear:Int) {
    init{
        println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
    }
    
    constructor(name:String) : this(name, 1997){
        println("보조 생성자가 사용되었습니다.")
    }
}

// 결과
1990년생 박보영님이 생성되었습니다.
1997년생 전정국님이 생성되었습니다.
2004년생 장원영님이 생성되었습니다.
1997년생 이루다님이 생성되었습니다.
보조 생성자가 사용되었습니다.
1997년생 차은우님이 생성되었습니다.
보조 생성자가 사용되었습니다.
1997년생 류수정님이 생성되었습니다.
보조 생성자가 사용되었습니다.

기본 생성자와 보조 생성자는 클래스를 사용하는 사람에게 다양한 방법으로 인스턴스를 생성하는 방법을 제시함으로써 편의를 제공한다.

profile
잘 먹고 잘살기

0개의 댓글

관련 채용 정보