코틀린 생성자 vs 자바 생성자
- 코틀린은 자바에 비해 생성자가 여러 개 필요한 경우가 적다.
- 자바에서 필요한 오버로드 생성자는 코틀린의 기본 생성자와 이름 붙인 인자 문법으로 해결이 가능하다.
이름 붙인 인자
- 함수나 생성자 호출시 파라미터의 이름을 명시적으로 지정하여 값을 전달하는 방식
fun formatMessage(name: String, age: Int, location: String) { // ... }
- 을 호출시에
formatMessage(location = "Seoul", age = 30, name = "Alice") 혹은 formatMessage(name = "Alice", age = 30, location = "Seoul")
- 인자가 무엇을 의미하는지 명확하게 전달이 가능하다.
부 생성자가 필요한 경우
- 프레임 워크 클래스를 확장하는 경우, 다양한 방법으로 인스턴스 초기화할 수 있어야 할때
- 예: 안드로이드의
View
클래스
예시
- View 클래스
open class View { constructor (ctx: Context) { // 코드 } constructor (ctx: Context, attr: AttributeSet) { // 코드 } }
- MyButton 클래스
class MyButton : View { constructor (ctx: Context) : super(ctx) { // ... } constructor (ctx: Context, attr: AttributeSet) : super(ctx, attr) { // ... } }
생성자 위임 방식
- super() 를 통한 위임
- this() 를 사용해 클래스 자신의 다른 생성자를 호출할 수 있음
`class MyButton : View { constructor (ctx: Context) : this(ctx,MY_STYLE) { // ... } constructor (ctx: Context, attr: AttributeSet) : super(ctx, attr) { // ... } }
모든 부 생성자는 상위 클래스를 초기화하거나 다른 생성자에게 생성을 위임하는 역할을 해야합니다!
Uploaded by N2T
'코틀린 > 코틀린인액션' 카테고리의 다른 글
[코틀린 인 액션] 4.2.3 인터페이스에 선언된 프로퍼티 구현 (0) | 2024.03.04 |
---|---|
[KOTLIN] 클래스 초기화 : 주 생성자와 초기화 블럭 (0) | 2024.02.21 |
[KOTLIN] 봉인된 클래스(sealed class) : 클래스 계층의 확장 제한 (0) | 2024.02.19 |
[KOTLIN] 클래스 계층 정의 (0) | 2024.02.09 |
[KOTLIN] 로컬 함수와 확장 (0) | 2024.02.09 |