클래스는 스칼라에서 객체를 만드는데에 필요한 청사진이다. 메소드를 담을수 있고 값과 변수, 타입, 객체, traits, 클래스도 담을 수 있다.
이들은 다 합쳐서 멤버라고 불린다.
단순히 키워드 class를 쓰고 identifier를 붙여서, 그리고 문법적으로 대문자로
//scala2
class User
val user1 = new User
//scala3
class User
val user1 = User()
키워드 new는 클래스의 인스턴스를 하나 만들때 사용,
기본적으로 인자를 받지 않는 기본 컨스트럭터가 있다.
하지만 보통 클래스 본체와 함께 생성자를 원하는 경우도 있을 것이다.
//scala2
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)
println(point1.x) // prints 2
println(point1) // prints (2, 3)
//scala3
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)"
end Point
val point1 = Point(2, 3)
println(point1.x) // prints 2
println(point1) // prints (2, 3)
→ unit 은 어떤 계산만 하고 값을 반환하지 않겟다는 의미로 쓰일수 있는것 같다.
→ point 클래스는 네개의 멤버가 있다
→ 변수 x,y 그리고 move라는 메소드, toString이라는 메소드
기본 생성자(var x: Int, var y: Int)가 클래스 선언부에 바로 선언,호출된다.
move 메소드는 두개의 정수를 받아서 unit 값을 반환한다. → 아무런 정보를 담고있지 않다.
대부분 자바 계통의 언어의 void와 비슷하다.
toString은 반면에 아무런 인자를 받지않고, string갑을 반환