본문 바로가기
안드로이드 프로그래밍/문법정리

[kotlin] 생성자

by 1chanhue1 2023. 1. 26.

주 생성자는 클래스를 초기화할 떄 주로 사용하는 간략한 생성자로 클래스 본문 밖에서 정의하며

부 생성자는 클래스 본문 안에서 정의한다.
또한 코틀린에서는 초기화 블록(initializer block)을 통해 초기화 로직을 추가할 수 있다.

 

 

 

주생성자 -> 풀버전(생략이 없는 버전)
- 클래스 이름 옆에 괄호로 둘러싸인 코드
- 클래스를 통해서 객체를 만드는데 필요한 재료들을 적어준다
- 재료이름(변수명): 재료타입(변수타입)
- 반드시 한개만 존재할 수 있다. -> constructor 키워드를 생략가능하다.

 

주생성자 -> init을 생략하는 방법

주생성자 -> constructor를 생략하는 방법

주생성자 -> 기본값을 적어주는 방법

주생성자 -> 생략할수 있는 모든 걸 생략하는 방법

 

 

 

this 키워드 사용

부 생성자(Secondary Constructor)
- 부 생성자의 경우 constructor 키우더를 생략할 수 없다.(주 생성자의 경우 가능했음)
- 부 생성자는 클래스명 우측에 올 수 없음, 클래스의 본문에 위치한다.
- 객체를 만드는 방법이 여러개 일 수 있음.
- 객체를 만드는데 있어서 필수조건인 것은 주생성자에 적고, 부 생성자에는 객체를 만들기 위한 그 외의 옵션들을 적는다.
- 부 생성자에는 주 생성자에서 필요한 조건을 포함하고 있어야 한다.(파라미터를 포함하고 있어야한다는 애기)
- 부 생성자는 주생성자에게 생성을 위임해야 한다.

 

실행순서
- 부생성자를 호출 해도 -> 1. 부생성자 안에 있는 주생성자 호출 -> 2. init블록 호출-> 3. 부 생성자 본문 호출
- 클래스 속성에서 초기화를 시켜주지 않아도 되는 이유?
  초기화 블록에서 초기화를 보장해주기 때문 -> 클래스가 생성될 때 초기화 블록은 무조건 실행된다.
- 초기화 블록에 없는 속성은 선언할 때 초기화 해줘야함! age처럼