스칼라

[스칼라] getter setter

Parkjuida 2022. 2. 23. 17:02

스칼라 클래스에서는 비공개가 아닌 모든 var 멤버에 대해 getter, setter를 자동으로 정의한다.

getter는 변수 이름과 동일하고 setter는 변수이름에 _=을 붙인 형태로 정의된다.

class Time {
  var hour = 12
  var minute = 0

  def hour_=(h: Int) {
    if(h >= 0 && h <= 24) {
      h
    } else {
      -1
    }
  }
  
  def minute_=(m: Int): Unit = {
    if(m >= 0 && m <= 60) m else -1
  }
}

// method minute_= is defined twice
// conflicting symbols both originated in file '<console>'

만약 위와 같이 hour_= 와 minute_=를 정의 하려고 하면 에러가 발생된다. private 멤버에 대해서는 아래와 같이 getter와 setter를 지정해 줄 수 있다.

class Time {
  private var _hour = 12
  private var _minute = 10

  def minute = _minute
  def minute_=(input: Int): Unit = {
    require(0 <= input && input < 60)
    _minute = input
  }
}