스칼라와 자바가 다른점

스칼라는 자바 환경을 그대로 쓰면서도, 더 나은 점이 많습니다.

  • 스칼라의 문법은 매우 간결합니다.
  • 스칼라도 정적 타입 프로그래밍 언어이지만, 강력한 타입 추론 기능에 힘입어서, 마치 동적 타입 언어처럼 편리하게 씁니다.
  • 스칼라는 순수 객체지향 프로그래밍 언어입니다. 그래서 모든 객체가 클래스의 인스턴스이며, ++=처럼 연산자로 보이는 기호들도, 사실은 모두 메서드입니다.
  • 스칼라는 순수 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)을 쉽게 만들 수 있습니다.