원문 http://www.atmarkit.co.jp/ait/articles/1202/10/news122.html
아래는 번역한 것입니다.
Twitter와 Foursquare , LinkedIn 이 사용하는 "Scala"
" Scala "는 표준 Java 플랫폼에서 동작 할 수있는 프로그래밍 언어입니다. 2003 년경에 등장한 비교적 새로운 언어이지만, 이미 Twitter와 Foursquare, LinkedIn의 채용 실적도 있습니다. 국내(일본)에서도 일부 채용 사례가있는 것 같습니다.
이름 Scala (스칼라)는 "확장 (확장 가능) 언어"를 의미합니다. Scala는 Java의 Generics ( 제네릭 )의 설계 등에도 관여 한 스위스 연방 공과 대학 (EPFL)의 Martin Odersky (마틴 주문 스키) 교수에 의해 설계 및 개발되었습니다.
교수에 따르면, Scala 언어 개발 동기로서 다음의 두 가지가 있다고되어 있습니다 ( Wikpedia 에서 인용).
- 범용 언어는 확장이 아니고서는 안된다. 같은 개념으로 작은 프로그램도 큰 프로그램도 기술 할 수 있어야한다
- 확장 성 (확장 성)는 함수형 언어 와 객체 지향 언어 의 두 가지 프로그래밍의 개념을 통합하고 일반화함으로써 실현할 수있다
개발 동기에있는 것처럼 Scala는 작은 스크립트 용도에서 대규모 시스템에서 사용하는 언어로서의 용도까지 다양한 요구에 부응 할 수 있도록되어 있습니다. 그리고 그 확장 성을 제공하기 위해, "객체 지향 언어와 함수형 언어의 개념을 결합 해 '라는 특징을 가지고 있습니다.
또한 Scala 공식 사이트에서 Scala의 소개 글에서는 먼저 다음과 같이 언급하고 있습니다 ( Scala 공식 사이트 에서 인용).
Scala is a general purpose programming language designed to express common programming patterns in a concise,
elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages,
enabling Java and other programmers to be more productive.
Code sizes are typically reduced by a factor of two to three when compared to an equivalent Java application.
일본어 번역입니다 ( 프로그래밍 언어 Scala 일본어 정보 사이트 에서 인용).
Scala는 일반적인 프로그래밍 패턴을 간결하게 · 우아한 · 그리고 형태 안전하게 표현하기위한 범용 프로그래밍 언어입니다.
Scala는 객체 지향 기능과 함수형 언어의 기능을 잘 통합하고, Scala를 사용하여 Java 및 기타 프로그래머의 생산성은 더욱 향상 될 것입니다.
Scala 코드 크기는 일반적으로 동일한 기능을 제공하는 Java 응용 프로그램에 비해 2 분의 1 ~ 3 분의 1 정도입니다.
"객체 지향 함수형 언어의 기능을 통합함으로써보다 간결하게 코드를 작성하고 생산성을 향상 할 것"이라고 말했다.
코드를 Java와 Scala에서 비교해 보자
여기에 하나 예를 살펴 보자. 아래의 코드는 '인수로 전달 된 문자열 목록 중 제 2 인수에 지정된 길이 이상의 요소 를 모두 대문자로 변환하고 그 요소를 함수 내부에서 새로 정의 된 목록에 추가하여 반환 "함수를 Java로 기술 한 것입니다.
public List filterNames ( List < String > names , int len ) {
List < String > result = new ArrayList ();
for ( String name : names ) {
if ( name . length () > = len ) {
result . add ( name . toUpperCase ());
}
} return result ;
}
Java 소스 코드
목록 루프 돌려 요소마다 길이를 체크하여 조건에 맞는 요소를 함수 내부에 정의 된 목록에 추가합니다.
동일한 작업을 Scala로 작성하면 이렇게됩니다.
def filterNames ( list : List [ String ] len : Int ) = list . filter ( _ . length () > = len ) map ( _ . toUpperCase )
Scala의 소스 코드
전달 된 목록 길이 (len)에서 필터링 하고 결과 목록의 요소마다 모두 대문자로 변환 한 목록을 반환합니다. 어떻습니까? 물론, Java 코드보다 많이보다 적은 코드로되어 있습니다.
이것은 매우 간단한 예는 있지만, Scala이라고 간결하고 이해하기 쉬운 코드를 쓸 것을 알 수 있습니다.
기존의 언어를 좋은 모습을 가지고 한 'Scala "의 5 가지 특징
Scala는 다음과 같은 특징을 가지고 있습니다. 다양한 기능을 가지고 있습니다 만, Scala 만이 가지는 특별한 기능이라고하는 것은별로없고 기존의 프로그래밍 언어에서 좋은 점을 받아 들여 잘 균형을 가지고 있다고 생각합니다.
[1] Scala는 객체 지향 언어
Scala는 순수 "객체 지향"언어입니다. 모든 값은 " 객체 "이며, 모든 작업은 " 방법 "입니다.
Java의 int 및 double과 같은 기본 형식 은 존재하지 않습니다. 예를 들어, Scala에서 "1 + 2"라는 코드는 "Int 클래스 (값 1)의"+ "라는 메서드에 인수 2를 전달할 '라는 뜻입니다.
또한 Scala에서는 객체 지향을 실현하기 위해 클래스 기반의 상속과 ' 믹스 인 합성」을 지원하고 있습니다.
"믹스 인 합성 '은' 토레이토 "(Ruby에서 말하는 "모듈"Java로 말하면 '구현을 가질 인터페이스의 일종 ")를 사용하여 하나의 클래스에 여러 구현을 가지는 기능을 맞추는 것입니다.
[2] 함수형 프로그래밍이 가능
" 함수형 프로그래밍 "이라는 단어는 최근 잘 듣는 키워드지도 모릅니다. 이것은 간단하게 말하면, 부작용 (데이터의 내부 상태를 변경할 수)를 가지지 않는 "함수"를 사용하여 프로그램을 구축하는 프로그래밍 기법입니다.
함수형 프로그래밍의 장점으로 " 함수가 독립적이고"상태 "가 없기 때문에 가독성과 유지, 테스트, 리팩토링이 용이하게된다 "는 장점이 있습니다.
Scala에서는 함수를 "퍼스트 클래스"로 간주합니다. 즉, "정수 나 문자열 등처럼 함수를 인수 또는 반환 값에있다" 라는 것입니다.
또한 "상수"(val) 나 「불변 컬렉션 "을 사용하여 프로그래밍 가능 합니다 (※ 변수 (var)과 가변 컬렉션을 사용해도 상관 없습니다).
이 같은 특징을 가지고 있기 때문에 표현력이 올라 간결한 작성할 수 있습니다.
객체 지향과 함수형 프로그래밍은 대립하는 개념이 아니라 Scala에서는 각각 상승하고 간결한 묘사와 유연성을 실현하고 있습니다.
[3] 정적 타이핑
" 정적 타이핑 "는 변수 나 함수가 미리 정해진 데이터 형을 처리하도록 정확한 설명을 요구하는 프로그래밍 언어의 특성입니다.
Scala는 정적 타입 언어이기 때문에 안전하게 추상화가 가능한 타입 시스템 을 가지고 있습니다. 따라서 형식으로 인한 오류는 런타임이 아닌 컴파일시에 존재를 알 수 있습니다.
"정적 타이핑이라고 형태의 기술로 프로그램이 중복되는 것은?"라고 생각하는 분들도 있을지 모릅니다. 하지만 Scala에서는 형태 추론 에 의해 형식 설명을 생략 할 수 간결한 표현을 가능하게하고 있습니다.
[4] Java와의 호환성
Scala의 소스 파일을 컴파일하면 JVM (Java 가상 머신)의 바이트 코드입니다. Java 가상 머신에서 작동하기 때문에 Scala에서 Java의 메소드 나 필드를 호출 할 수 있으며, 반대의 경우도 가능 합니다.
즉, 기존의 풍부한 Java 라이브러리를 그대로 활용할 수 있습니다 (※ 일부 예외 있음).
【5】 병행 처리
현재 CPU의 멀티 코어 화 (하나의 프로세서에 여러 개의 프로세서 코어를 봉입 한 기술)이 일반화되고 있습니다. Java에서 병렬 처리 를 할 때 java.lang.Thread 클래스와 java.util.concurrent 패키지를 사용하여 병렬 처리를 수행합니다.
Scala에서는 멀티 코어를 인식하고 효율적으로 병렬 처리를위한 'Actor'라는 라이브러리를 가지고 있습니다. 이것은 " 행위자 모델 '에 따라 라이브러리에서 액터끼리 메시지를 보내 서로를 처리하는 프로그래밍 모델입니다.
또한 Scala 2.9는 병렬 처리 지원의 컬렉션 (palallel collection)가 사용 가능하게되었습니다. 이것은 컬렉션을 병렬화하여 각각의 스레드에서 수행 할 작업을 간단하게 작성할 수 있습니다.