생성자의 기본 목적은 클래스의 객체를 만드는 방법을 지정하는 것입니다. 즉, 생성자는 객체를 초기화하고 객체를 사용할 수 있도록 준비합니다. 이 작업은 객체를 인스턴스화할 때 처리되었습니다. 생성자 내의 코드는 클래스의 객체가 인스턴스화될 때 실행됩니다. 매개변수를 포함하거나 포함하지 않고 생성자를 정의할 수 있습니다.
기본 생성자
기본 생성자는 매개변수가 없는 생성자입니다. 다음 코드 스니펫과 같이 기본 생성자를 정의할 수 있습니다.
class SmartDevice(val name: String, val category: String) {
클래스본문
}
매개변수화된 생성자 정의
SmartDevice 클래스에서 name 속성과 category 속성은 변경할 수 없습니다. SmartDevice 클래스의 모든 인스턴스가 name 속성과 category 속성을 초기화하도록 해야 합니다. 현재 구현에서 name 및 category 속성의 값은 하드코딩됩니다. 즉, 모든 스마트 기기는 "Android TV" 문자열로 이름이 지정되며 "Entertainment" 문자열로 분류됩니다.
불변성은 유지하되 하드코딩된 값을 피하려면 매개변수화된 생성자를 사용하여 초기화합니다.
- SmartDevice 클래스에서 기본값을 할당하지 않고 name 속성과 category 속성을 생성자로 이동합니다.
class SmartDevice(val name: String, val category: String) {
var deviceStatus = "online"
fun turnOn(){
println("Smart device is turned on.")
}
fun turnOff(){
println("Smart device is turned off.")
}
}
이제 생성자가 속성을 설정하는 매개변수를 허용하므로 이러한 클래스의 객체를 인스턴스화하는 방법도 변경됩니다. 다음 다이어그램에서 객체를 인스턴스화하는 전체 문법을 확인할 수 있습니다.
Kotlin의 생성자에는 두 가지 기본 유형이 있습니다.
- 기본 생성자. 클래스에는 클래스 헤더의 일부로 정의된 기본 생성자가 하나만 있을 수 있습니다. 기본 생성자는 기본 또는 매개변수화된 생성자일 수 있습니다. 기본 생성자에는 본문이 없습니다. 즉, 코드를 포함할 수 없습니다.
- 보조 생성자. 한 클래스에 여러 보조 생성자가 있을 수 있습니다. 매개변수를 포함하거나 포함하지 않고 보조 생성자를 정의할 수 있습니다. 보조 생성자는 클래스를 초기화할 수 있으며 초기화 로직을 포함할 수 있는 본문을 가집니다. 클래스에 기본 생성자가 있는 경우 각 보조 생성자는 기본 생성자를 초기화해야 합니다.
기본 생성자를 사용하여 클래스 헤더의 속성을 초기화할 수 있습니다. 생성자에 전달되는 인수는 속성에 할당됩니다. 기본 생성자를 정의하는 문법은 클래스 이름으로 시작하고 그 뒤에 constructor 키워드와 괄호 쌍이 나옵니다. 괄호에는 기본 생성자의 매개변수가 포함됩니다. 매개변수가 두 개 이상인 경우 쉼표로 매개변수 정의가 구분됩니다. 다음 다이어그램에서 기본 생성자를 정의하는 전체 문법을 확인할 수 있습니다.
보조 생성자는 클래스의 본문에 포함되고 이 생성자의 문법은 세 부분으로 구성됩니다.
- 보조 생성자 선언. 보조 생성자 정의는 constructor 키워드로 시작하고 그 뒤에 괄호가 나옵니다. 해당하는 경우 괄호에는 보조 생성자에 필요한 매개변수가 포함됩니다.
- 기본 생성자 초기화. 초기화는 콜론으로 시작하고 그 뒤에 this 키워드와 괄호 쌍이 나옵니다. 해당하는 경우 괄호에는 기본 생성자에 필요한 매개변수가 포함됩니다.
- 보조 생성자 본문. 기본 생성자 초기화 뒤에 중괄호 쌍이 나오며 이 중괄호에는 보조 생성자의 본문이 포함됩니다.
다음 다이어그램에서 문법을 확인할 수 있습니다.
예를 들어 스마트 기기 제공업체에서 개발한 API를 통합하려고 하지만 이 API가 초기 기기 상태를 나타내는 Int 유형의 상태 코드를 반환합니다. API는 기기가 오프라인인 경우 0 값을, 기기가 온라인인 경우 1 값을 반환합니다. 다른 정수 값이면 상태는 알 수 없음으로 간주됩니다. 다음 코드 스니펫에서 볼 수 있듯이 SmartDevice 클래스에 statusCode 매개변수를 문자열 표현으로 변환하는 보조 생성자를 만들 수 있습니다.
class SmartDevice(val name: String, val category: String) { // 주 생성자
var deviceStatus = "online"
// 보조 생성자
constructor(name: String, category: String, statusCode: Int) : this(name, category) {
deviceStatus = when (statusCode) {
0 -> "offline"
1 -> "online"
else -> "unknown"
}
}
fun turnOn(){
println("Smart device is turned on.")
}
fun turnOff(){
println("Smart device is turned off.")
}
}
fun main() {
// 주 생성자를 이용한 인스턴스 생성
var smartTv1 = SmartDevice("LG Smart TV", "Entertainment")
println(smartTv1.name)
smartTv1.turnOn()
smartTv1.turnOff()
println(smartTv1.deviceStatus)
println("==========================================")
// 보조 생성자를 이용한 인스턴스 생성
var smartTv2 = SmartDevice("Android TV", "Entertainment", 0)
println(smartTv2.name)
smartTv2.turnOn()
smartTv2.turnOff()
println(smartTv2.deviceStatus)
}
실행 결과
LG Smart TV
Smart device is turned on.
Smart device is turned off.
online
==========================================
Android TV
Smart device is turned on.
Smart device is turned off.
offline
'Java > Android App - Kotlin' 카테고리의 다른 글
Kotlin - 클래스 (속성 정의) (0) | 2023.01.03 |
---|---|
Kotlin - 클래스 (Class) (0) | 2023.01.03 |
Kotlin - Null 허용 변수 (0) | 2023.01.03 |
Kotlin 문법 - 조건문 (if/else, when) (0) | 2023.01.01 |
Kotlin 문법 - 변수 선언 (Variable declaration) (0) | 2023.01.01 |