프로그래밍/Kotlin

[코틀린 / Kotlin] getter와 setter

pupu91 2022. 10. 20. 16:29
반응형

 

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: 음수 나이는 허용되지 않습니다.
반응형