프로그래밍/Scala

코딩 바보의 Scala 입문하기

seungdols 2015. 11. 20. 10:34

Scala

설치

스칼라 설치는 윈도우 기준입니다.

scala-lang 다운로드

각자 OS에 맞게 다운로드하셔서 설치하시면 됩니다.
IDE는 Eclipse, IntelliJ, NetBeans등 많습니다.

Console실행을 어디서나 하고 싶으시면, 환경변수에 scala\bin 디렉토리까지 Path에 추가해주시면 됩니다.(이 정보는 검색하시면 금방 나옵니다. 설치시 아마도 자동으로 import 될 겁니다.)

특징
  1. 타입 추론
    • 변수의 자료형을 컴파일러가 유추한다.
  2. 함수 개념
    • 코드블록,고계함수,컬렉션 라이브러리
  3. 불변 변수
    • 스칼라는 불변변수를 기본적으로 지원하며, 용도에 따라 변경 가능 변수도 선언 할 수 있다.
scala> println("Hello, Scala World")
Hello, Scala World                  

scala>

아래 보는 것처럼 정수는 객체인 걸 확인 할 수 있다.

scala> 1 + 1      
res13: Int = 2    

scala> (1). + (1) 
res14: Int = 2    

scala> 5 * 12     
res15: Int = 60   

scala>

스칼라에서는 미세한 예외를 제외하면, 모든 것이 객체로 처리 된다.
이 것으로도 정적 타이핑 시스템을 사용하는 언어와 다른 점이다.

scala> "abc".size         
res16: Int = 3            

scala> 4 + "seungdols"    
res17: String = 4seungdols

scala>

스칼라에서는 문자열 그 자체로 어느 정도 ‘일급 객체’로 볼 수 있다.
위 코드에서는 스칼라 컴파일러가 타입 추론하여 알아서 String 형 변환까지 하는 것을 볼 수 있다. 그러나, 스칼라는 강한 타이핑 시스템을 사용한다.

루비와는 다르게 콘솔로 실행하더라도, 코드 내용을 한 줄 한 줄 컴파일하고 즉시 실행한다.

즉, Strong Typing System이므로 컴파일시간에 오류를 잡아내준다. 이것은 루비보다 훨씬 나은 점이자, 좋은 장점으로 여길 수 있다. 왜냐하면, 루비는 오류가 있더라도 Run-time시에 발생해 프로그래머의 실수나, 오류를 잡아내려면 무조건 실행이 되어야 한다. 그런데, 스칼라의 경우 언어 컴파일러 차원에서 오류를 잡아 주므로 훨씬 안정적이다.

표현·조건
scala> 5 < 6               
res18: Boolean = true      

scala> 5 <= 6              
res19: Boolean = true      

scala> 5 <= 2              
res20: Boolean = false     

scala> val a = 1           
a: Int = 1                 

scala> val b = 2           
b: Int = 2                 

scala> if(b < a){          
     | println("True")     
     | }else{              
     | println("False")    
     | }                   
False                      

scala>

별 다른 차이는 없다. Java의 조건식과 거의 유사하다. 장점은 루비와는 다르게 컴파일시간에 자료형을 바인딩(Binding)1
Java와도 다른 점은 스칼라는 자료형을 추론한다는 점이다. 특히, 스칼라의 장점이기도 하지만, 단점이기도 한 불변변수/변경가능 변수가 존재한다.

val은 불변 변수, var은 변경 가능 변수이다.

루비에서는 0이 True로 평가되지만, C에서는 0은 false이다.
두 언어에서 nil은 false로 평가 된다.

scala> if(0){println("True")}
<console>:11: error: type mismatch;
 found   : Int(0)
 required: Boolean
       if(0){println("True")}
          ^
scala> if(Nil){println("True")}
<console>:11: error: type mismatch;
 found   : scala.collection.immutable.Nil.type
 required: Boolean
       if(Nil){println("True")}
          ^

즉, Nil, 0을 boolean 값으로 검사할 수 없다.


  1. 쉽게 말해 변수에 자료형타입을 이어주는 것을 말함.


  •  무단 수정 및 배포는 금지합니다. 
  •  모든 내용은 본 블로그 운영자가 정리한 내용입니다. 
  •  참조한 정보에 대해서는 출처를 남기고 있습니다.
  •  다양한 곳에서 참조한 경우 출처 누락이 있을 수 있습니다.
  •  (말해주시면  수정하도록 하겠습니다.)
  •  틀린 내용 / 오류가 포함된 내용은 댓글로 남겨주세요.
  •  choiseungho0822@gmail.com 보내주셔도 됩니다.
  •  Seungdols Wiki 운영중입니다.



반응형