Scala 란?
공식
https://www.scala-lang.org/
제작자
- Martin Odersky(독일) 2001년에 만듬
- 스위스 로잔 EPFL(로잔 연방공대)의 교수
- 타입세이프의 공동 창업자
- 자바 제네릭스 설계자의 일원
- javac 참조 컴파일러 최초 개발
- Coursera(온라인강의사이트) 에서 함수형 프로그래밍과 Principles Reactive Programming(진보된 웹 프로그래밍) 을 가르치고 있음.
- Gj, Pizza 프로젝트에서 출발
- 컴포넌트 소프트웨어를 잘 지원하기 위한 언어 (자바가 많이 비대해졌음 / 대형 프로젝트에도 모듈별로 설계가능)
- Scalable, abstraction, composition, decompositio 을 충족하기 위해 암수형 언어가 필요했다.
특징
- Scalable Language 확장가능한 언어
- 순수 객체지향언어이며 클래스와 특성을 통한 고급 구성 요소 아키텍처를 지원한다. (스칼라 모든것이 객체이다)
-> 1+1 구문에서 1도 객체임 - 다른 언어의 전통적인 디자인 패턴이 이미 적용되어 있다. (예: 싱글톤)
- 함수형 언어
- 암시적 클래스를 통해 자바와 관계없이 기존 작업에 새 작업을 추가 할 수 있다.
- 표준 자바 플랫폼에서 실행 (JVM 에서 실행)
- -> 자바와 스칼라는 자바 프로젝트에 같이 존재 할 수 있고 다른 프로젝트에 존재할 수 있다.
- -> 자바 라이브러리, 프레임워크 및 도구를 모두 사용할 수 있다.
- ant 또는 maven, Eclipse, IntelliJ, Netbeans 와 같은 IDE, Spring 또는 Hibernate 와 같은 프레임워크 모두 Scala 와 완벽하게 작동한다. 심지어 모든 JVM 과 안드로이드에서도 실행가능하다.
- 발전된 자바로 다루기 보다는 새로운 언어로 접근 하는 것이 낫다.
기능적인 특징
- 스칼라는 순수한 객체지향 언어이다.
- 개념적으로 모든 값이 객체이며 모든 연산은 메소드 호출이다.
- 이 언어는 클래스와 특성을 통한 고급 구성 요소 아키텍쳐를 지원합니다.
- 컬렉션 프레임워크 Scala 2.8 릴리즈에서 제공하는 것이 중요한 변화 이전에도 지원을 하긴 했고 프레임워크에서는 그것들과 호환됩니다.
함수형 언어?
함수형 프로그래밍 언어의 시초
IPL -> LISP -> Scheme -> Erlang -> Clojure -> Scala 의 갈래
기본 습득을 위한 문서
http://docs.scala-lang.org/index.html
가이드 및 개요
http://docs.scala-lang.org/overviews/?_ga=1.4105904.1400885517.1486215221
튜토리얼
http://docs.scala-lang.org/tutorials/
등등
Review
먼저 기초적인 문법을 살펴본 결과 의외로(?) 형식이 엄격하지 않다. (예: 메소드 return 타입 등)
코딩시 불필요한 입력을 최소화 할 수 있게 신경쓴 모습이 많다.
아래 메소드 정의 모두 같은 결과를 가진다.
def add(x:Int, y:Int):Int = {
return x + y
}
def add(x:Int, y:Int) = {
x + y
}
def add(x:Int, y:Int) = x + y
for 문에서도 중첩 for 문을 ; 으로 구분해서 한라인으로 지정 가능하다.
뿐만아니라 함수에서 getOrElse 구문으로 기본 리턴값을 지정 가능하다.
switch 문에서도 break 생략이 가능하다.
세미콜론 ; 도 한라인에서 구분을 위한 것이 아니면 생략 가능하다.
결론.
그동안 기본 로직에서 예외처리를 해야 했던 것들을 없앴다.
언어적으로 쉽게 접근이 가능하도록 했다.
JAVA 플랫폼에서 연동이 강력하지만 오히려 JAVA 랭귀지 보다는 JAVASCRIPT 를 자주쓰던 개발자가 접근하기 더 용이해 보일 정도록 자바스크립트와 어느정도 유사하며 기존 랭귀지 형식에 얽매이지 않는 모습이다.
스칼라 실행에 대해서
https://www.scala-lang.org/documentation/getting-started.html
터미널 & 쉘
> scala
This is a Scala shell.
Type in expressions to have them evaluated.
Type :help for more information.
scala> object HelloWorld {
| def main(args: Array[String]): Unit = {
| println("Hello, world!")
| }
| }
defined module HelloWorld
scala> HelloWorld.main(Array())
Hello, world!
scala>:q
>
터미널 & 쉘 실행
자바 바이트 표준코드 생성
$ scalac HelloWorld.scala
클래스 파일 생성
$ scalac -d classes HelloWorld.scala
생성된 바이트 코드 실행
$ scala HelloWorld
옵션을 지정 할 수 있다. (cp 는 classpath 별칭)
$ scala -cp classes HelloWorld
스크립트로 실행
#!/usr/bin/env scala
object HelloWorld extends App {
println("Hello, world!")
}
HelloWorld.main(args)
$./script.sh
IDE 에서 실행
(생략..)
그외 참조할만한 문서
Programming.In.Scala 책 Summary 정리
https://github.com/wonury/Programming.In.Scala/wiki - 11장까지 하다 멈춤
https://github.com/codeport/scala/wiki/Programming-in-scala - 31장까지 진행. 거의 끝났음
자바 프로그래머를 위한 스칼라 튜토리얼
http://docs.scala-lang.org/ko/tutorials/scala-for-java-programmers.html
스칼라 예제소스
https://github.com/vkostyukov/scalacaster
휘리릭 읽어볼만
https://github.com/taokim/h3scala
개발환경
https://www.scala-lang.org/download/
그외 정리 잘된 문서
https://twitter.github.io/scala_school/
위키백과의 스칼라
https://ko.wikipedia.org/wiki/%EC%8A%A4%EC%B9%BC%EB%9D%BC_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)
'Programming > Scala' 카테고리의 다른 글
[Scala] 정규표현식 (0) | 2017.04.28 |
---|---|
[Scala] Scala가 자바보다 매력적인 이유 (0) | 2017.04.04 |
[Scala] 스칼라는 무엇이며 왜 만들어 졌나 (일문번역) (0) | 2017.02.02 |