Skip to content

scala 첫걸음

myeongin edited this page Mar 21, 2016 · 6 revisions

2장 scala 첫걸음

scala 인터프리터 사용법을 익히자

  • scala를 시작하는 가장 쉬운 방법은 인터프리터, 즉 scala 표현식과 프로그램을 쓸 수 있는 대화형 shell 을 사용하는 것이다.
  • command 창에 scala 라고 입력해 shell 을 시작할 수 있다.
myeongin-ui-MBP:~ myeongin$ scala
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_25).
Type in expressions to have them evaluated.
Type :help for more information.

scala> 1 + 2
res0: Int = 3
  • 1+2 와 같은 표현식을 입력하면 res0: Int = 3 이라고 인터프리터가 응답한다.
  • res0은 자동으로 만들어진 결과값의 이름이며 0번째 result 라는 뜻이다.
  • res0 은 식별자 로써 나중에 사용 할수 있다.
  • Int는 type이며 없은 결과값은 3이다.
  • Int 타입은 scala 패키지의 Int를 말한다.
  • scala 의 Int는 JAVA 의 int값에 대응하지만 그와 대응하는 클래스들이 들어 있다.
  • 무언가 출력을 하려면 println("hello world") 처럼 println()을 사용하면 된다.
scala> val msg = "Hello, world"
msg: String = Hello, world
  • msg는 타입추론을 통해 String으로 type을 추론했다는 결과다.
scala> println(msg)
Hello, world

변수를 정의해보자

  • var 과 val 은 모두 값을 할 당 할 수있는 변수를 의미하지만 var은 재할당이 가능하고 val은 재 할당이 불가능하다.

함수를 정의해보자

scala> def max(x: Int, y :Int) : Int = {
     | if(x >y) x
     | else y
     | }
max: (x: Int, y: Int)Int
  • 함수의 시작은 def 로 선언한다. 파라미터는 타입추론을 하지 않기 때문에 콜론 뒤에 타입을 선언해야 한다.
  • 결과값은 타입을 지정하지 않아도 추론을 하지만 재귀적은 함수에는 결과값의 타입을 지정해줘야 한다.
scala> max(3,5)
res0: Int = 5
  • 함수를 선언하면 위와같이 사용한다.
scala> def greet() = println("Hello world")
greet: ()Unit
  • Unit type은 JAVA에서 void를 생각하면 된다.
  • 인터 프리터를 나갈 때는 :quit나 :q 를 입력한다.

스크립트를 작성해보자

  1. 확장자가 .scala인 파일을 생성한다.
  2. scala 문법을 입력한다.
  3. scala를 실행한다.
myeongin-ui-MacBook-Pro:temp myeongin$ scala hello.scala 
Hello world

while로 루프를 돌고, if로 결정해보자

var i = 0
while (i < args.length) {
  println(args(i))
  i +=1
}
  • 일반적으로 scala 는 인덴테이션을 2로 사용한다.
  • JAVA와 문법이 굉장히 유사하다
  • scala도 세미콜론을 사용해 문장을 구분하지만 대부분의 경우 생략해도 된다.

foreach 와 for를 사용해 이터레이션해보자

var args = "asdfas asdf asd"
args.foreach(arg => println(arg))

scala> var args = "asdfas asdf asd"
args: String = asdfas asdf asd

scala> args.foreach(arg => println(arg))
a
s
d
f
a
s
 
a
s
d
f
 
a
s
d
  • 함수형 언어의 주요 특성 중 하나는 함수가 1급 계층 요소다.

Clone this wiki locally