작년 전공 수업에서 사용한 처음 접한 언어인 Scala에 대해서 소개해보고자 합니다. 아주 얕게만 사용한 것이라 정말 소개 정도만 가능할 것 같습니다.
Scala Docs의 언어 소개에 해당하는 TOUR OF SCALA 페이지를 활용하여 소개해보겠습니다.
스칼라는 일반적인 프로그래밍 패턴을 간결하고 우아하며 타입-세이프한 방식으로 표현할 수 있게 설계된 최신 멀티-패러다임 프로그래밍 언어입니다. 객체지향과 함수형 언어의 특징을 자연스럽게 통합합니다.
라고 docs에서 소개하고 있습니다.
모든 값이 객체라는 의미에서 스칼라는 순수 객체지향 언어입니다. 객체의 타입과 행위는 클래스와 트레잇으로 설명됩니다.
스칼라는 객체지향 실현을 위해 클래스 기반의 상속과 여러 아키텍쳐를 지원합니다. “1+2” 구문에서 1 마저도 객체입니다.
스칼라는 모든 함수가 값이라는 의미에서 함수형 언어입니다.
스칼라는 함수를 일급 시민(First-Class Citizen)으로 다룹니다. 즉, 함수 자체를 하나의 값으로 취급합니다. 변수가 정수, 문자열 등을 담듯이 함수를 담고 이를 다른 함수에 전달할 수 있습니다. 함수를 인자로 받거나 결과값으로 함수를 반환하는 함수를 고차 함수(High-Order Function)이라고 하는데 스칼라에서는 이러한 고차 함수를 쉽게 정의하고 사용할 수 있습니다.
// 'inc'는 Int를 입력받아 1을 더해 반환하는 함수 타입
val inc: Int => Int = (x: Int) => x + 1
// 메소드 'twice'는 x에 대해 함수 f를 두 번 적용한 결과를 반환
def twice(f: Int => Int, x: Int): Int = f(f(x))
twice(inc, 5) // inc(inc(5)) = 5 + 1 + 1 = 7 : Int
함수형 프로그래밍에서는 데이터의 불변성(immutability)을 중요하게 생각합니다. 이는 Side Effect가 줄어들고, 코드의 안정성과 가독성이 높아지기 때문입니다. 따라서 스칼라의 기본 컬렉션(List, Set, Map 등)은 불변 컬렉션을 우선 제공합니다. 물론 가변 컬렉션도 사용 가능합니다.
이외에도 스칼라는 케이스 클래스, 패턴 매칭, for 컴프리헨션 등을 지원합니다.