본문 바로가기
Programming/Scala

[5강] 클래스와 객체

by 유주원 2018. 3. 3.

CLASS, FIELD, METHOD


scala에서의 class, field, method는 JAVA와 상당히 유사하다.

일단 scala에서는 아래와 같이 class를 정의 할 수가 있다.


class Test {

  var variable = 0
}


해당 클래스를 객체로 만들고 싶다면 아래와 같이 new로 선언해 주면 된다.


val test1 = new Test()


또한 Test class 내의 변수 무결성을 보장해 주기 위해 private로 선언해 줄 수도 있다.


class Test {

  private var variable = 0

}


scala에서는 기본적으로 변수 선언을 하게 되면 public이며, 따로 public 키워드를 사용하고 있지는 않다.


이제 변수를 파라미터로 받아서 variable에 더해주는 method를 하나 추가해 보자.


class Test {

  private var variable = 0


  def add(b: Int) : Int = {

    variable += b

  }


add 함수를 살펴보게 되면 우선 정수 타입의 b라는 파라미터를 받아서 variable에 더해주는 역할을 한다. : Int의 뜻은 integer 타입을 리턴하겠다는 뜻이다. 만약 return 값이 하나이고 충분히 추론 가능할 경우에는 위와 같이 따로 return variable을 명시해 주지 않아도 scala에서 variable 값을 리턴하게 된다.




만약 리턴값이 존재하지 않는 method일 경우에는 반환 타입을 아래와 같이 Unit이라고 명시해 주면 된다. 타 언어의 void와 같은 기능을 한다고 보면 된다.


def add(b: Int) : Unit


또한 파라미터의 입력으로 들어온 b의 경우는 val로 선언되기 때문에 method 내에서 값을 바꾼다든지 할 경우 컴파일 에러가 날 수가 있다. 입력으로 들어온 값을 변경하지 못하게 함으로써 side effect를 막으려는 효과를 scala에서 내려고 val로 선언해 준 것이 아닌가라고 생각해 본다.


싱글톤 객체


scala에서 싱글톤 객체를 사용하기 위해서는 class 대신 object를 사용하면 된다. 


object Test{

  def print(b: String) : Unit = {

    println(b)

  }

}


싱글톤 객체내에 선언되어 있는 method의 경우는 정적 메소드처럼 사용할 수가 있다. 즉 따로 new 연산자를 통해 객체를 만들 필요 없이 아래와 같이 사용이 가능하다.


Test.print("HELLO WORLD")