Scala
Scala의 문법 및 특징
Scala
Java와 Scala를 비교하였을 때 표현, 문법 등에서 대표적으로 다른 점을 정리하였습니다.
1. Scala는 순수한 객체지향적 언어이다.
Java에서는 기본적인 타입과 참조 가능한 타입이 분리되어 있지만,
scala는 숫자와 함수를 포함한 모든 것이 객체이다.
1 + 2 * 3
사실 이 표현식은
1.+(2.*(3))
함수 호출로만 이루어져있다.
위처럼 +
, *
는 scala에서의 식별자가 된다.
2. 하나의 인자를 가지는 함수는 이항연산자처럼 표현
위에서의 +
, *
의 경우와 같이, 다른 함수들도 하나의 인자를 가질 경우에, 이항연산자처럼 표현이 가능하다.
Thread.sleep(1000)
이 경우에는 다음과 같이 표현 할 수 있다.
Thread sleep 1000
3. 인자 없는 함수
class A(x: Double, y: Double) {
def a() = x
def b() = y
}
위의 코드에서 a와 b에 접근할 때에는 아래와 같이 괄호를 붙혀줘야 한다.
val a = new A(1.2, 3.2)
println(a.a())
필드인 것처럼 빈 괄호를 붙히지 않고 접근하려면 다음과 같이 바꿀수 있다.
class A(x: Double, y: Double) {
def a = x
def b = y
}
이러한 함수는 정의할때도 사용할 때도 빈 괄호를 붙히지 않는다.
4. 상속과 재정의
모든 클래스들은 항상 상위 클래스로부터 상속된다. 만약 상위 클래스가 존재하지 않을 경우에는scala.AnyRef
를 상속한다.
상위 클래스의 함수를 오버라이드 할 때에는 다음과 같이 선언한다.
override def toString() = ""
5. 트레잇(trait)
클래스는 상속을 받는 것 뿐만 아니라, 트레잇에서 코드를 불러 올 수 있다.
Java에서는 비교 가능한 객체들이 Comparable
인터페이스를 구현하게 된다.
하지만 Scala에서는 다음과 같이 우아하게 표현할 수 있다.
trait Ord {
def < (that: Any): Boolean
def <= (that: Any): Boolean = (this < that) || (this == that)
def > (that: Any): Boolean = !(this <= that)
def >= (that: Any): Boolean = (this < that)
}