class Person { /.../ }
class클래스 이름{클래스 내용}으로 구성된다.
class Empty
클래스 내용이 없으면,{클래스 내용}을 생략할 수 있다.
주 생성자를 갖는다.주 생성자는 Class 헤더 부분의 클래스 이름 뒤에 선언된다.주 생성자를 선언하지 않으면, 코틀린에서 자체적으로 만들어준다. 주 생성자는 클래스 인스턴스 생성 시 항상 호출된다.class Person constructor(firstName: String) { /.../ }
class클래스 이름주 생성자{클래스 내용}
constructor는 *접근제어자(visibility modifiers) 가 없으면 다음과 같이 생략할 수 있다.
class Person(firstName: String) { /.../ }
접근제어자 : public, private, protected, internal 4가지로
접근제어자가 붙어 있는 해당 요소에의 접근을 제한한다.
Class의 인스턴스 생성 과정을 더 제어하고 싶으면 Class 내부에 init 블록으로 생성자 코드를 추가할 수 있다.
class Person constructor(firstName: String) { init { println("First initializer block that prints $firstName"); } } val person = Person("Kim")결과 : First initializer block that prints Kim
Person클래스의 인스턴스를 생성하면서주 생성자(init블록)이 자동적으로 실행된다.
init블록을 여러 개 쓰면 위에서부터 순서대로 실행된다.
class Person constructor(firstName: String) { init { println("First initializer block that prints $firstName") } init { println("Second initializer block that prints $firstName") } } val person = Person("Kim")결과:
First initializer block that prints Kim
Second initializer block that prints Kim
부 생성자를 가질 수 있다.constructor(받을 프로퍼티) {내용}으로 정의한다.프로퍼티(인자)의 숫자, 종류를 각각 다르게 정의할 수 있다.부 생성자가 호출되더라도, 주 생성자가 자동적으로 먼저 호출되고 이후에 부 생성자가 호출된다.class Constructors { init { println("Init block") } constructor(i: Int) { println("Constructor $i") } } val con = Constructors(1) 결과 : Init block Constructor 1