반응형
init, constructor
생성자는 새로운 인스턴스를 만들 때 호출하는 함수입니다.
코틀린에서 생성자는 init과 constructor 2가지 함수를 통해 초기화할 수 있습니다.
init 생성자
init 함수는 매개변수가 없고 반환되는 값이 없는 함수입니다.
생성자를 통해 인스턴스가 만들어질 때 호출되는 함수로 검증이나 특별한 로직을 수행할 때 사용할 수 있습니다.
@Table(name = "users")
@Entity
class User(
var name: String,
val age: Int?,
@OneToMany(mappedBy = "user", cascade = [CascadeType.ALL], orphanRemoval = true)
val userLoanHistory: MutableList<UserLoanHistory> = mutableListOf(),
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,
) {
init {
if (name.isBlank()) {
throw IllegalArgumentException("이름은 비어 있을 수 없습니다.")
}
}
constructor
코틀린에서 보조 생성자로 인스턴스를 생성 시 편의를 제공하거나 추가적인 구문을 실행하는 데 사용합니다.
init {
user.userLoanHistory.add(this)
}
✅ constructor 보조 생성자는 기본 생성자 (init)을 호출하여 초기화를 먼저 진행한 후 보조 생성자 블록이 실행됩니다.
fun main() {
Per("aaa", 1)
Per("bbb", 2)
Per("ccc")
Per("ddd")
Per()
}
class Per(name: String, age: Int) {
init {
println("${name} - ${age} init 생성자 실행")
}
constructor(name: String): this(name, 20) {
println("${name} 보조 생성자 construtor 실행")
}
constructor(): this("test", 10) {
println("입력 값 없이 초기화")
}
}
get, set
코틀린에서 var로 변수를 선언하면 자동으로 getter, setter를 내부적으로 생성해 줍니다.
val 변수는 set이 불가하여 get만 자동 생성됩니다.
class UserInfo {
var name: String = ""
set(value) {
if (value == "김연아")
field = "$value 는 천재입니다"
else field=value
}
//get()은 따로 변경하지 않음
var address: String = ""
set(value) {
if (value == "한국") {
field = "대한민국"
} else field = value
}
get() {
return "$field 에 거주하고 있습니다"
//println("$field 에 거주하고 있습니다") 불가능! 반드시 return문 작성
}
var phone: Int = 0
constructor(name: String, address: String, phone: Int = 321) {
this.name = name
this.address = address
this.phone = phone
}
}
fun main(args: Array<String>) {
val user1 = UserInfo("김연아", "한국")
println(user1.name)
//김연아 는 천재입니다
println(user1.address)
//대한민국 에 거주하고 있습니다
println(user1.phone)
//321
val user2 = UserInfo("홍길동", "서울")
println(user2.name)
// 홍길동
println(user2.address)
//서울 에 거주하고 있습니다
}
val isReturn: Boolean
get() = this.status == UserLoanStatus.RETURNED
참고자료
반응형
'Kotlin' 카테고리의 다른 글
Kotlin 안전한 Null 처리 방법 : ?., ?:, !! 활용 및 SQL, 메모리 최적화 전략 (0) | 2024.12.16 |
---|