주 생성자는 클래스를 초기화할 떄 주로 사용하는 간략한 생성자로 클래스 본문 밖에서 정의하며
부 생성자는 클래스 본문 안에서 정의한다.
또한 코틀린에서는 초기화 블록(initializer block)을 통해 초기화 로직을 추가할 수 있다.
주생성자 -> 풀버전(생략이 없는 버전)
- 클래스 이름 옆에 괄호로 둘러싸인 코드
- 클래스를 통해서 객체를 만드는데 필요한 재료들을 적어준다
- 재료이름(변수명): 재료타입(변수타입)
- 반드시 한개만 존재할 수 있다. -> constructor 키워드를 생략가능하다.
주생성자 -> init을 생략하는 방법
주생성자 -> constructor를 생략하는 방법
주생성자 -> 기본값을 적어주는 방법
주생성자 -> 생략할수 있는 모든 걸 생략하는 방법
this 키워드 사용
부 생성자(Secondary Constructor)
- 부 생성자의 경우 constructor 키우더를 생략할 수 없다.(주 생성자의 경우 가능했음)
- 부 생성자는 클래스명 우측에 올 수 없음, 클래스의 본문에 위치한다.
- 객체를 만드는 방법이 여러개 일 수 있음.
- 객체를 만드는데 있어서 필수조건인 것은 주생성자에 적고, 부 생성자에는 객체를 만들기 위한 그 외의 옵션들을 적는다.
- 부 생성자에는 주 생성자에서 필요한 조건을 포함하고 있어야 한다.(파라미터를 포함하고 있어야한다는 애기)
- 부 생성자는 주생성자에게 생성을 위임해야 한다.
실행순서
- 부생성자를 호출 해도 -> 1. 부생성자 안에 있는 주생성자 호출 -> 2. init블록 호출-> 3. 부 생성자 본문 호출
- 클래스 속성에서 초기화를 시켜주지 않아도 되는 이유?
초기화 블록에서 초기화를 보장해주기 때문 -> 클래스가 생성될 때 초기화 블록은 무조건 실행된다.
- 초기화 블록에 없는 속성은 선언할 때 초기화 해줘야함! age처럼
'안드로이드 프로그래밍 > 문법정리' 카테고리의 다른 글
[kotlin] 코틀린 enum class (열거 클래스) (0) | 2024.05.28 |
---|---|
[kotlin] Data class, Sealed class (0) | 2023.08.14 |
[kotlin] 초기화 지연(lazy initialization) (0) | 2023.08.14 |
[kotlin] 코틀린 스코프 함수 let, with, run, apply, also 차이 비교 정리 (0) | 2023.08.10 |
[kotlin] 접근 제한자(Visibility Modifiers) (0) | 2023.01.27 |