스칼라와 자바가 다른점
스칼라는 자바 환경을 그대로 쓰면서도, 더 나은 점이 많습니다.
- 스칼라의 문법은 매우 간결합니다.
- 스칼라도 정적 타입 프로그래밍 언어이지만, 강력한 타입 추론 기능에 힘입어서, 마치 동적 타입 언어처럼 편리하게 씁니다.
- 스칼라는 순수 객체지향 프로그래밍 언어입니다. 그래서 모든 객체가 클래스의 인스턴스이며,
+
나+=
처럼 연산자로 보이는 기호들도, 사실은 모두 메서드입니다. - 스칼라는 순수 OOP 언어이면서 동시에 함수형 프로그래밍 언어이기도 합니다.
- 스칼라의 모든 것은 식(expression)입니다.
if
문이나,for
문, 패턴 부합, 그리고try
/catch
절조차 모두 하나의 식(expression)이며, 각 식을 평가하면 결괏값이 반환됩니다.return
키워드 없이도 최종 평가식이 함수나 메서드의 반환값이 됩니다. - 스칼라는 변수나 컬렉션 모두 불변값 사용을 지향합니다.
- 스칼라는
null
을 잘 안 쓰기 때문에,NullPointerException
의 영향을 덜 받습니다.
코드 수준 차이점
- 스칼라에서는 식(expression) 끝에 세미콜론(
;
)을 쓰지 않아도 됩니다. - 중괄호(
{}
) 대신 들여쓰기로 코드 블록을 묶습니다. (중괄호를 써도 됩니다) - 자바의
final
변수처럼val
로 불변(immutable) 변수를 선언하고,var
로 변이(mutable) 변수를 선언합니다. for
함축문이 단순 반복문 수준을 넘어 더 강력하고 편리한 기능을 제공합니다.- 패턴 부합(pattern matching) 기능이 있습니다.
- 여러 트레이트(trait)를 한 클래스나 한 오브젝트에 섞어 넣을 수 있습니다.
- 확장(extension) 메서드로 닫힌(closed) 클래스에도 새 기능을 추가할 수 있습니다.
- 스칼라에는 최신 오픈 소스 함수형 프로그래밍 라이브러리들이 있습니다. (cats, scalaz)
- 케이스 클래스(case class)로 함수형 데이터 모델을 만들기 좋고, 패턴 부합에도 유용합니다.
- 이름(by-name) 기반 파라미터와 중위 표기법(infix notation), 괄호 생략, 확장 메서드, 고차 함수를 활용해서, 나만의 제어문이나 영역 특화 언어(DSL)을 쉽게 만들 수 있습니다.