Skip to content

github.com

myeongin edited this page Mar 19, 2016 · 12 revisions

1장 확장 가능한 언어

스칼라 설계와 그 이유를 설명하고 배경, 역사를 설명

scala는 어떤 언어인가?

  • 스칼라는 확장가능 가능한 언어 라는 뜻이다. "Scalable Language" 줄여서 scala 라고 부른다고 한다.
  • 사용자의 요구에 따라 자랄 수 있는 언어로 설계
  • 작은 스크립트 부터 커다란 시스템 구축까지 사용 가능
  • 쉬운 접근성
  • Java 플랫폼에서 실행 가능
  • 모든 자바 라이브러리와 연동 가능
  • 자바 컴포넌트를 한데 묶는 스크립트를 작성할 때 좋다.
  • 커다란 시스템을 구축하거나 재사용 가능한 컴포넌트로 이루어진 프레임워크를 만들 때 더 강점을 발휘
  • 객체지향과 함수형 프로그래밍 개념을 정적타입언어 에 합쳐놓은 언어다.
  • 가독성?이 좋으며 간결하다.

Scala 확장성

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) 는 스레드 위에 구현할 수 있는 동시성 추상화 요소다.

Clone this wiki locally