문득 constructor가 붙은 코드가 뭔지 헷갈렸다.
이러는김에 전체적으로 어떤 것인지 정리해보려고 한다.
왜 보조 생성자를 사용할까?
- 다양한 초기화 방법 제공: 동일한 클래스에 여러 가지 초기화 방법을 제공하고 싶을 때 보조 생성자를 사용합니다. 이는 Java에서 오버로딩된 생성자를 제공하는 것과 유사합니다.
- 상속과 관련된 작업: 서브클래스에서 슈퍼클래스의 특정 생성자를 호출해야 할 경우 보조 생성자를 활용합니다.
주의할 점 :
- 주 생성자와 보조 생성자를 혼합하여 사용할 때는, 보조 생성자가 항상 주 생성자를 호출해야 합니다.
- init 블록은 주 생성자와 함께 실행됩니다. 따라서 보조 생성자를 통해 객체를 생성할 경우, 보조 생성자가 호출되기 전에 주 생성자와 init 블록이 먼저 실행됩니다.
주생성자
- 클래스 선언부에 위치하는 생성자입니다.
- constructor 키워드 없이 클래스 헤더 부분에 직접 매개변수를 선언함으로써 정의됩니다.
- 초기화 블록 init을 사용하여 주 생성자의 본문을 정의할 수 있습니다.
//예시
class Person(val name: String, var age: Int) {
init {
println("이름은 $name, 나이는 $age 입니다.")
}
}
보조생성자
- constructor 키워드를 사용하여 정의됩니다.
- 클래스 내부에 여러 개의 보조 생성자를 가질 수 있습니다.
- 보조 생성자에서는 반드시 주 생성자를 호출해야 합니다(this()를 사용).
//부생성자 예시
class Person(val name: String, var age: Int) {
// 주 생성자
init {
println("이름은 $name, 나이는 $age 입니다.")
}
// 보조 생성자
constructor(name: String) : this(name, 0) {
println("이름만 주어진 경우: $name")
}
}
3. 보조 생성자가 많은 코드 예시
class Book(val title: String) {
var author: String = ""
var price: Int = 0
// 보조 생성자 1
constructor(title: String, author: String) : this(title) {
this.author = author
println("'$title'라는 제목의 책이 $author에 의해 작성되었습니다.")
}
// 보조 생성자 2
constructor(title: String, author: String, price: Int) : this(title, author) {
this.price = price
println("'$title'라는 제목의 책이 $price원에 판매됩니다.")
}
}
fun main() {
val book1 = Book("코틀린 기초") // 기본 생성자 호출
val book2 = Book("코틀린 중급", "홍길동") // "코틀린 중급"라는 제목의 책이 홍길동에 의해 작성되었습니다." 출력
val book3 = Book("코틀린 고급", "이순신", 30000) // "코틀린 고급"라는 제목의 책이 이순신에 의해 작성되었습니다." 후에 "코틀린 고급"라는 제목의 책이 30000원에 판매됩니다." 출력
}
자바의 오버로딩 생성자를 제공한다는 말에 좀 깨닫는게 많았다.
하지만 굳이 이렇게 사용하지 않아도 코틀린 더 편한걸 제공한다.
class User(val name: String, val age: Int = 0) {
// name만 필요한 경우
User("Alice")
// name과 age 둘 다 필요한 경우
User("Bob", 25)
}
'기초를 모르면 나가리(코틀린 인 액션)' 카테고리의 다른 글
안드로이드 라이프사이클 정리하기 (0) | 2023.11.23 |
---|---|
인터페이스 작성방법, 상속, 구현 등등 정리 (0) | 2023.11.19 |
코틀린 기초 람다식 , 람다 프로그래밍 (0) | 2023.10.20 |
코틀린 클래스, 객체, 인터페이스 (0) | 2023.10.17 |
코틀린 컬렉션과 확장함수 (0) | 2023.10.16 |