반응형
getter와 setter 사용 예시
class GetterAndSetterDemo(){
/* 아래의 코드 처럼 작성하면 x*/
var num: Int = 0
set(value){
println("값을 ${value}로 설정")
num = value
this.setNum(value); //재귀 호출 동작 -> 스택 오버 플로우 발생하기 때문에 field사용해 주어야 함
}
/* field 사용하기 */
set(value) {
println("값을 ${value}로 설정")
field = value //field는 num 필드를 의미(백킹 필드 - 재귀호출 방지)
}
get(){
println("${field}값을 반환")
return field
}
}
fun main(){
var demo = GetterAndSetterDemo()
demo.num = 100 //setter 호출
println(demo.num) //getter 호출 후 값 반환
}
출력 결과
값을 100로 설정
100값을 반환
100
값을 검증하는 setter와 값을 가공해서 반환하는 getter 메소드 정의 클래스
class Person(val name: String, pAge: Int){
var age: Int = 0
set(value){
when{
value < 0 -> throw Exception("음수 나이는 허용되지 않습니다.")
value > 200 -> throw Exception("나이가 비정상적으로 많습니다.")
}
field = value //when에 걸리지 않았을때 값을 담겠다.
}
/ *pAge: Int 값을 받아 왔을때 init 블럭을 통해 초기화 시키기*/
init{
//주생성자가 동작한다음에 init 동작. age 값 수치에 따라서 set 동작
age= pAge
}
}
fun main(){
var p1 = Person("스폰지밥", 15)
println(p1.name)
println(p1.age)
}
출력 결과
스폰지밥
15
Exception in thread "main" java.lang.Exception: 음수 나이는 허용되지 않습니다.
반응형
'프로그래밍 > Kotlin' 카테고리의 다른 글
[코틀린 / Kotlin] 데이터 클래스 (0) | 2022.10.20 |
---|---|
[코틀린 / Kotlin] lazy 와 lateinit 를 활용한 지연 초기화 (0) | 2022.10.20 |
[코틀린 / Kotlin] open class, private , protected 속성 설정 (0) | 2022.10.20 |
[코틀린 / Kotlin] 보조 생성자 활용하기 (0) | 2022.10.19 |
[코틀린 / Kotlin] class 정의 , inti 블록 (0) | 2022.10.19 |