반응형
Scala는 객체지향의 개념과 함수형의 개념이 섞인 언어이다. 객체지향 개념이 있듯이 Scala에는 당연히 Class가 존재한다. Scala에서의 Class는 Java의 Class와 유사하지만, Scala에서는 Class가 파라미터를 가질 수 있다는 차이점을 갖고 있다.
아래 소스코드는 Scala 코드로 작성한 파라미터를 가지는 Class의 예제이다.
class Complex(real: Double, imaginary: Double) {
def re() = real
def im() = imaginary
}
이 Complex Class (복소수 클래스)는 두 개의 인자를 받는다. 하나는 복소수의 실수 부분이고, 또 다른 하나는 복소수의 허수 부분에 해당한다. 이 파라미터는 Complex 클래스의 인스턴스를 생성할 때, 반드시 전달되어야 한다.
var complex = new Complex(1.5, 2.3);
Complex Class를 보면 re와 im이라는 두 함수를 가지고 있는데 리턴 타입은 명시적으로 선언되지 않았다. 이는 Scala의 타입 추론으로 인해 가능한 것으로, Scala 컴파일러는 함수의 오른편을 보고 두 함수 모두 Double 타입을 리턴한다고 자동으로 유추하게 된다.
object ComplexNumbers {
def main(args: Array[String]) {
val c = new Complex(1.2, 3.4)
println("imaginary part: ${c.im()}")
}
}
re와 im 함수는 호출되기 위해서는 함수명 뒤에 빈 괄호를 붙여줘야 한다. 하지만 아무런 파라미터를 받지도 않고 단순 리턴하는 함수이기에 인자를 받는 부분인 괄호 부분이 없었으면 하는 생각이 들 수 있다. Java의 경우 해당 생각만 할 수 있을 뿐, 빈 괄호를 작성하는 것은 피할 수 없을 것이다. 하지만 Scala는 이를 해결할 수 있다. 함수를 정의할 때 이름 뒤에 괄호를 붙이지 않으면 된다. 다음은 괄호 없이 함수를 선언하는 것의 예이다.
class Complex(real: Double, imaginary: Double) {
def re = real
def im = imaginary
}
출처: https://docs.scala-lang.org/ko/tutorials/scala-for-java-programmers.html
반응형
'Programming > Scala' 카테고리의 다른 글
[Scala-02] Scala에서 Java Class 사용하기 (0) | 2019.09.24 |
---|---|
[Scala-01] Hello World 출력하기 (0) | 2019.09.22 |
[Scala] Window 10 Scala REPL 설치하기 (0) | 2019.09.19 |