Scala 란
스칼라는 "Sca"lable
+ "la"nguage
합성어 이다.
Martin Odersky라는 사람에 의해서 만들어 졌으며, 2001년 부터 개발 되어 2004년에 배포 됐다.
스칼라는 간결하고 우아하며 유연한 문법을 사용하는 정적 타입의 다중 패러다임 JVM 언어로, 작은 인터프리터 방식의 스크립트부터 대규모의 복잡한 어플리케이션에 이르기까지 폭넓은 규모 확장성을 제공하는 여러 도구를 제공한다.
- JVM 과 자바스크립트 언어 : 스칼라는 JVM의 성능과 최적화를 활용함은 물론이고 자바를 중심으로 구축된 풍부한 기존 도구와 라이브러리 생태계도 이어받는다. 하지만 스칼라가 JVM에 한정된 것은 아니다. Scala.js(http://www.scala-js.org)는 스칼라를 자바스크립트 포팅하는 실험 프로젝트다.
- 정적 타입 : 스칼라는 튼튼한 애플리테이션을 만드는 도구로 정적 타입 지정(static typing)을 채택했다. 스칼라 타입 시스템은 자바 타입 시스템의 여러 단점을 고쳤고, 타입 추론(type inference)을 사용해서 대부분의 귀찮고 불필요한 타입 표기를 생략할 수 있게 지원한다.
- 다중 패러다임 - 객체지향 프로그래밍 : 스칼라는 객체지향 프로그래밍(object-oriented programming)(OOP)을 완벽히 지원한다. 스칼라는 혼합 합성(Mixin composition)을 사용해서 타입을 깔끔하게 구현하는 트레이트(trait)로 자바 객체 모델을 보완한다. 스칼라에서는 실제로 모든 것이 객체다. 심지어 수를 표현하는 타입도 객체다.
- 다중 패러다임 - 함수형 프로그래밍 : 스칼라는 함수형 프로그래밍(functional programming)(FP)을 완전히 지원한다. FP는 동시성, 빅데이터, 일반적인 코드의 정확성을 사고하는 데 있어 최선의 도구다. 불변값(immutable value), 1급 함수(first class), 부수 효과(side effect)가 없는 함수, 고차(higher-order) 함수, 함수 컬렉션 등은 모두 간결하고 강력하며 정확하 코드를 작성하는데 기여한다.
- 복잡한 타입 시스템 : 스칼라는 자바 타입 시스템을 더 유연한 제네릭스(generics)로 확장하고 코드 정확성을 높이기 위해 몇 가지 개선을 덧붙였다. 타입 추론을 사용하는 스칼라 코드는 종종 동적 타입 언어만큼이나 간결하다.
- 간결하고 우아하며 유연한 문법 : 번거롭고 긴 자바 코드가 스칼라에서는 간결한 구문으로 바뀐다. 스칼라 기능을 활용하면, 도메인 특화 언어(domain specific language)(DSL)를 만들거나, 마치 ‘원래의’ 스칼라 구문인 것처럼 느낄 수 있는 API 를 제공할 수 있다.
- 규모 확장성 - 아키텍처 : 스칼라를 사용하면 작은 인터프리터 방식의 스크립트부터 대규모의 복잡한 애플리케이션까지 작성할 수 있다.
- 트레이트를 사용한 혼합 합성
- 추상 타입 멤버(abstract type member)와 제네릭스
- 내포 클래스
- 명시적인 자기 타입 지정의 4가지 언어 메커니즘이 규모와 관계 없이 시스템을 조합할 수 있도록 만들어준ㅌ다.
1. 병렬 처리
컴퓨터 성능을 트랜지스터가 증가함에 따라 Frequency가 올라가지 않으므로, Core 수를 증가시키기 시작했다.
PPP(Popular Parallel Programming) Grand Challenge 에서 앞으로 분산 병렬 프로그래밍을 어떻게 할 것인가 논의 되기 시작한다.
-
Hardware : Multi-thread is the future trend of processors
- Parallel programming : 여러 개의 컴퓨터로 동시 다발적 동작
- Concurrent programming : 한 개의 컴퓨터의 여러개의 코어를 동시 다발적 동작
프로그래밍 패러다임 Imperative : Procedural, Object-oriented 등이 있다. –> Step by step 의 폰노이만식 프로그래밍
프로그래밍 패러다임 Declarative : Functional
함수형 프로그래밍
Input x
> (Transformation)function f1 : f1(x)
> (Immutable State)function f2 : f2(f1(x))
> (No side-effects)function f3 : f3(f2(f1(x)))
- Immutable : 원래 Input은 그대로 살아 있고 새로운 Output이 나오는 구조
- side-effects : 부수 효과, 같은 변수를 여러 코어들이 연산할 때 정확하게 예측할 수가 없으므로 값이 보장 되지 않는 것. 분산 병렬 처리는 폰노이만식으로 할 시 정확하게 연산할 수 없다.
기존의 폰노이만식 프로그래밍은 시간이 지나며 데이터 셋들이 꼬이기 시작하므로 불변함수를 둔다.
2 스칼라 언어 특징
전체적으로 깔끔하며 모던 스크립트 언어와 같음
Type Inference를 하기 때문에 explicit declaration 할 필요가 없다.
var capital = Map("korea" -> "Seoul", "US" -> "Washington")
capital += ("China" -> "Beijing")
println(capital("korea"))
Lazy Evaluation 방식으로 작동한다. 실제로 필요할 때 작동이 된다.(Call-by-Need) 이로 인하여 퍼포먼스가 늘고 추상화가 편리해진다. 그리고 infinite data(Unbounded data) 구조에서는 lazy evaluation 방식이 필수적이다.
빅데이터 개발 순서
-
데이터 탐색 시 통계 지식분들과 함께 협업 할 때
R
을 활용하거나, 바로Python
을 활용하여 Proof-of-Concept 진행한다. -
Production 은
Scala
를 활용한다.