이 글은 Programming in Scala 4/e
를 읽고 정리한 글입니다.
Scala는 "확장 가능한(Scalable) 언어"라는 뜻이다. 이러한 이름에서 알 수 있듯 스칼라는 사용자의 요구에 따라 확장이 얼마든지 가능한 언어라는 뜻이다. 기술적으로는 객체지향
과 함수형 프로그래밍
개념을 합쳐놓은 정적 타입 언어
이다.
함수형 프로그래밍
거의 모든 것을순수 함수(동일 입력에는 동일한 리턴값/리턴값은 오직 input에만 의존(참조 투명성) / side effect가 없어야 함)
로 나누어 문제를 해결하는 기법으로, 작은 문제를 해결하기 위해 가독성을 높이고 유지보수를 용이하게 한다.
유명한 저서인Clean code
에서는 함수형 프로그래밍을 대입문이 없는 프로그래밍이라고 정의하였다.
정적 타입 언어 (statically typed language)
컴파일 시 변수의 타입이 결정되는 언어
순수함수의 특징인 side effect가 없으므로 병렬 처리(thread)의 안정성을 확보할 수 있고, 외부에 영향을 주지 않으므로 thread 처리 시 문제가 되었던 mutex 동기화를 고민하지 않아도 된다.
Scala에서는 함수형 프로그래밍을 지향하므로, 의도치 않은 동작을 방지하기 위해 val
사용을 권장한다.
스칼라는 새로운 타입을 만들고 이를 내장 타입만큼 편하게 사용할 수 있다. 스칼라는 확장성 원칙을 제어 구조에도 적용하는데, 이는 액터 기반 동시성 프로그래밍(actor-based concurrent programming)
스칼라 API인 Akka에서도 확인할 수 있다.
다중 프로세서가 확산됨에 따라 유의미한 성능을 내기 위해서는 앱의 병렬성
을 더 많이 살려야 한다. Java에는 다양한 스레드 기반 동시성 라이브러리가 있다. 스칼라는 자바 API처럼 이를 활용할 수 있다. 거기에, Akka는 액터 모델을 구현하는 추가 스칼라 라이브러리이며, Akka 역시 활용된다.
액터 (Actor)
액터는 스레드 위에 구현할 수 있는동시성 추상화 요소
이다. 액터들은 서로 메시지를 송/수신함으로써 통신한다. 이때, 송신 연산은!
로 표시하여 다른 액터에게 보낸다.recipient ! msg
위의 코드는 recipient라는 액터에 메시지를 보내는 연산이다.
송신은비동기적
이며, mailbox에 메시지가 전달된다.
Programming in Scala 4/e - Chapter 1
글 잘 봤습니다.