Scala란

smlee·2023년 8월 7일
0

Scala

목록 보기
1/37
post-thumbnail

이 글은 Programming in Scala 4/e를 읽고 정리한 글입니다.

확장 가능한 언어 Scala

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에 메시지가 전달된다.

📚 Reference

Programming in Scala 4/e - Chapter 1

1개의 댓글

comment-user-thumbnail
2023년 8월 7일

글 잘 봤습니다.

답글 달기