Scala 란?


공식

https://www.scala-lang.org/



제작자

    1. Martin Odersky(독일) 2001년에 만듬
    2. 스위스 로잔 EPFL(로잔 연방공대)의 교수
    3. 타입세이프의 공동 창업자
    4. 자바 제네릭스 설계자의 일원
    5. javac 참조 컴파일러 최초 개발
    6. Coursera(온라인강의사이트) 에서 함수형 프로그래밍과 Principles Reactive Programming(진보된 웹 프로그래밍) 을 가르치고 있음.

목적
    1. Gj, Pizza 프로젝트에서 출발
    2. 컴포넌트 소프트웨어를 잘 지원하기 위한 언어 (자바가 많이 비대해졌음 / 대형 프로젝트에도 모듈별로 설계가능)
    3. Scalable, abstraction, composition, decompositio 을 충족하기 위해 암수형 언어가 필요했다.

특징

    1. Scalable Language 확장가능한 언어
    2. 순수 객체지향언어이며 클래스와 특성을 통한 고급 구성 요소 아키텍처를 지원한다. (스칼라 모든것이 객체이다)
          -> 1+1 구문에서 1도 객체임
    1. 다른 언어의 전통적인 디자인 패턴이 이미 적용되어 있다. (예: 싱글톤)
    2. 함수형 언어
    3. 암시적 클래스를 통해 자바와 관계없이 기존 작업에 새 작업을 추가 할 수 있다.
    4. 표준 자바 플랫폼에서 실행 (JVM 에서 실행)
    1. -> 자바와 스칼라는 자바 프로젝트에 같이 존재 할 수 있고 다른 프로젝트에 존재할 수 있다.
    2. -> 자바 라이브러리, 프레임워크 및 도구를 모두 사용할 수 있다.
    3. ant 또는 maven, Eclipse, IntelliJ, Netbeans 와 같은 IDE, Spring 또는 Hibernate 와 같은 프레임워크 모두 Scala 와 완벽하게 작동한다. 심지어 모든 JVM 과 안드로이드에서도 실행가능하다.
    4. 발전된 자바로 다루기 보다는 새로운 언어로 접근 하는 것이 낫다.

기능적인 특징

    1. 스칼라는 순수한 객체지향 언어이다.
    2. 개념적으로 모든 값이 객체이며 모든 연산은 메소드 호출이다.
    3. 이 언어는 클래스와 특성을 통한 고급 구성 요소 아키텍쳐를 지원합니다.
    4. 컬렉션 프레임워크 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
그리고 변수 선언도 var, val 변수와 상수 구분 외 변수타입 설정이 없다.
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)



+ Recent posts