Kotlin : Setter 와 Getter

언어/Kotlin

Kotlin : Setter 와 Getter

해리누나 2022. 10. 12. 04:55
반응형

먼저, 몇가지 알아둬야할 것들을 적어보자면,

* Kotlin에서는 자바와 달리 변수를 만들면 자동적으로 getter와 setter가 내부적으로 생성이 된다.

* 불변변수인 val 의 경우 (그 값이 변경되서는 안되니) getter만 내부적으로 생성이 된다.

 

자, 그럼 만들었던 Glass 클래스 코드를 다시 보자.

class Glass(var content: Int, val capacity: Int)

content 의 특정상 가변변수(var)로 쓰여있는데 이 경우, 마음대로 그 값을 변경해도 허용이 되는 일이 일어나게 된다.

fun main(){
    val glass1 = Glass(90,150)
    glass1.content = 250
    glass1.content = -180
}

이런식으로 마이너스값까지 아무 제한없이 허용하게 되는데, 이는 가시성 수정자(visibility modifier)나 다른 메카니즘을 통해 확인되거나 보호가 되지 않아서 그런것이다. 속성 content 는 0보다 작거나 기존 제한 용량점보다 커질수가 없다. 이를 해결할 수 있는 방법은 Setter 메서드를 통해 가능하다.

 

glass1.content = 250 할당은 내부적으로 Set 메서드, 즉 glass1의 Content 속성값을 설정하는 메서드에 대한 호출로 이어진다. set 메서드는 앞에 얘기햇듯, 자동적으로 생성되며 전달된 값을 Backing Field 에 할당한다. Backing Field는 Int 오브젝트의 실제 데이터 필드, 즉 값이 실제로 위치한 메모리의 위치다. 언급했던 문제를 해결하기 위해, 우리는 set 메서드를 직접 설정해주면 된다.

 

이를 위한 단계

* 속성 content를 Constructor가 아닌 클래스 내부에 둔다.

* 해당 속성의 set메서드를 정의한다.

* 클래스 Constructor(생성자)에 시작값을 설정하는 매개변수를 둔다.

 

 

: 속성의 set 메서드는 항상 속성 바로 뒤에 정의해야 한다. 이 메서드는 정확히 하나의 매개변수, 즉 재설정할 값으로 보통 value 로 많이 쓴다. 키워드 field는 실제 값이 저장되어있는 메모리에 접근할 수 있게 해준다. 이 set메서드에 아까와 같은 오류들을 방지하기 위한 조건들을 써주면 된다. 우리의 경우 content의 값이 마이너스값일 경우 0으로, 용량보다 클 경우 그 값을 용량과 같은 양으로 만들어준다고 적은 것.

 

제대로 작동하는지 확인해 보자.

 

결과

결과를 통해 set메서드가 제대로 값을 고쳐준 걸 확인해 볼 수 있다.

 

 

 

728x90
반응형

'언어 > Kotlin' 카테고리의 다른 글

Kotlin : 리스트 (list)  (0) 2022.10.12
Kotlin : Setter 와 Getter 1.5  (0) 2022.10.12
Kotlin : 중간점검  (1) 2022.10.11
Kotlin : ArrayList (배열 + 리스트)  (0) 2022.09.07
Kotlin : Objectreference (ft. Call by value)  (0) 2022.09.05