- 훨씬 간결한 문법으로 자바 플랫폼을 위한 코드를 작성
- 한눈에 들어오는 분량으로 더 많은 코드를 이해하며 개발
- 자바 코드와 상호운용이 매우 편하고 직관적
- 수많은 자바 라이브러리를 그대로 활용
- 함수형 프로그래밍 언어
- OOP를 활용하면서 FP 점진적 학습 및 적용 가능
- 스칼라는 자바와 마찬가지로 자바 가상 기계 (JVM)에서 동작
- 스칼라도 객체 지향 프로그래밍 언어
- 스칼라도 정적 타입 언어, 컴파일 타임에 타입 검사
- 람다 함수 지원
- IntelliJ나 VSCode 같은 통합 개발 환경 IDE이 매우 우수
- 웹 애플리케이션 백엔드, 마이크로서비스 구축, 머신러닝에 활용할 라이브러리 풍부
![image](https://private-user-images.githubusercontent.com/40031858/243177506-7cd10389-cb5d-4685-8594-9fc563377ac7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTkxMTU5NDQsIm5iZiI6MTcxOTExNTY0NCwicGF0aCI6Ii80MDAzMTg1OC8yNDMxNzc1MDYtN2NkMTAzODktY2I1ZC00Njg1LTg1OTQtOWZjNTYzMzc3YWM3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MjMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjIzVDA0MDcyNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRhNzdiOWE2NWJhOTdiYjAxMzgxODYwMDQyNzYwNDRiYjQ1ZTQ0NjBhZjI5MjQ5M2Q1OGI1MjRiZTZlZjMwNjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.2TJ1EBVlPIA2LAjOoGFpG0SCWs8EmM5XGESybOC1FXQ)
- 스칼라는 자바 환경을 그대로 쓰면서도, 더 나은 점이 많다.
- 강력한 타입 추론 기능으로 마치 동적 타입 언어처럼 유연하고 편리
- 순수 객체 지향 프로그래밍 언어, 연산자 같은 기호도 사실은 메서드
- 순수 OOP 언어이면서 전격 함수형 프로그래밍 FP 가능
- 스칼라의 모든 표현은 식(expression). 평가한 결과값이 반환
- 변수나 컬렉션 모두 불변(immutable) 지향
- null을 잘 쓰지 않음. 따라서 NullPointerException의 영향 적음
- 스칼라에서는 식(expression) 끝에 세미콜론(;)을 쓰지 않아도 된다
- 자바의 final 변수처럼 val로 불변(immutable) 변수를 선언
- var로 변이(mutable) 변수를 선언
- for 함축문이 단순 반복문 수준을 넘어 더 강력하고 편리한 기능을 제공
- 패턴 부합(pattern matching) 기능
- 여러 트레이트(trait)를 한 클래스나 한 오브젝트에 포함 가능(mix-in)
- 확장(extension) 메서드로 닫힌(closed) 클래스에 추가 기능 덧붙이기 가능
- 최신 오픈소스 함수형 프로그래밍 라이브러리 cats, scalaz
- 케이스 클래스 (case class)로 함수형 데이터 모델링 편리
- 이름 기반(by-name) 파라미터와 중위 표기법 (infix notation)으로 DSL 작성 편리