본문 바로가기

Data/Data Engineering

[Scala] Scala 언어 기초공부(4) - 클래스

반응형

가장 단순한 클래스 정의는 예약어 class 와 식별자만 있는 것

class User
val user1 = new User

C++와 같게 new 는 클래스의 인스턴스를 만들기위해 사용됨

class Point(var x: Int, var y: Int) {

  def move(dx: Int, dy: Int): Unit = {
    x = x + dx
    y = y + dy
  }
  
  override def toString: String =
    s"($x, $y)"
}

val point1 = new Point(2, 3)
point1.x # 2
println(point1) // (2, 3)

생성자

class 가 생성될때 생성자는 기본 값을 제공하고, 선택적으로 매개변수를 가질수가 있음

class Point(var x: Int = 0, var y: Int = 0)

val origin = new Point # 기본적으로 x, y 값이 0으로 세팅
val point1 = new Point(1) # 바로 값을 넣을경우 왼쪽에 있는 변수에 값이 저장됨 즉 x에 1이 저장
println(point1.x) # 1

# 만일 x는 건들지않고 y값만 바꾸고싶을땐 지정을 해줘야함
val point2 = new Point(y=2)
println(point2.y) # 2

Private 멤버

c++ class를 배우게되면 private 변수가 있는데 scala도 동일하게 존재한다

class Point {
  private var _x = 0
  private var _y = 0
  private val bound = 100
  
  def x = _x
  def x_ = (newValue: Int): Unit = { # Unit 은 void와 유사하다고 생각
    if (newValue < bound) _x = newValue else printWarning
  }
  
  def y = _y
  def y_ = (newValue: Int): Unit = {
    if (newValue < bound) _y = newValue else printWarning
  }
  
  private def printWarning = println("WARNING: Out Of Bounds")
}

val point1 = new Point
point1.x = 99
point1.y = 101 // WARNING: Out Of Bounds

 

반응형