-
Notifications
You must be signed in to change notification settings - Fork 8
github.com
myeongin edited this page Mar 19, 2016
·
12 revisions
스칼라 설계와 그 이유를 설명하고 배경, 역사를 설명
- 스칼라는 확장가능 가능한 언어 라는 뜻이다. "Scalable Language" 줄여서 scala 라고 부른다고 한다.
- 사용자의 요구에 따라 자랄 수 있는 언어로 설계
- 작은 스크립트 부터 커다란 시스템 구축까지 사용 가능
- 쉬운 접근성
- Java 플랫폼에서 실행 가능
- 모든 자바 라이브러리와 연동 가능
- 자바 컴포넌트를 한데 묶는 스크립트를 작성할 때 좋다.
- 커다란 시스템을 구축하거나 재사용 가능한 컴포넌트로 이루어진 프레임워크를 만들 때 더 강점을 발휘
- 객체지향과 함수형 프로그래밍 개념을 정적타입언어 에 합쳐놓은 언어다.
- 가독성?이 좋으며 간결하다.
val captial = Map("US" -> "Washington", "France" -> "Parias")
captial += ("Korea" -> "Seoul")
println(captial("France"))
- 위 예제는 편리함과 유연성을 동시에 제공
- 쉽고 간결하다.
- Map은 libary abstraction 이라서 확장하고 변경 가능하다.
- HashMap 이나 TreeMap 같은 구체적인 구현을 지정 할 수도 있다.
- trait를 mixin 할수 있다.
- map 에 디폴트 값을 지정 할 수도 있다.
- map 의 method를 오버라이드 가능
def factorial( x : BigInt) : BigInt = if (x==0) 1 else x * factorial ( x - 1)
- 이 처럼 Java에서는 불가능 하지만 Scala 에서는 내장타입과 같이 정수 리터럴이나 *, - 등의 연산이 가능하다.
- 만약 BigInt 클래스가 없더라도 사용자가 별도로 구현 하면 된다.
- 스칼라는 확장성 원칙을 제어 구조에도 마찬가지로 적용된다.
- 이런 확장성을 스칼라 API 의 '액터기반 동시성 프로그래밍(actor-based concurrent programming)' API에서 볼 수 있다.
- 병렬처리 같은 동시성 처리를 위해서는 얼랭의 '액터' 같은 메시지 전달 아키텍처가 더 유용 할 수도 있다.
- 자바에서는 다양한 스레드 기반 동시성 라이브러리를 제공한다. scala 에서는 그 라이브러리 들을 활용 할 수 있지만 얼랭의 액터 모델을 구현하는 라이브러리를 추가 제공한다.
- 액터(actor) 는 스레드 위에 구현할 수 있는 동시성 추상화 요소다.