요새 okky에서 scala와 java가 조금 시끄러웠다.
oracle이 java를 인수하면서 다소 폐쇄(?)적인 성향을 가지게 되었고,
신기술로 무장된 새로 생겨나는 언어들과
C와 같은 기존의 다른 언어들보다(모던C++)
발전속도가 느리다는게 요지인듯 하다.
그리고 그 대안중 하나가 scala였다.
요새 또 잘나가는 spark도 scala로 만들었다고 하니
겸사겸사 scala가 뭔지 좀 훑어보기로 했다.
scala는 함수형언어+객체지향형 언어이다.
그리고 jvm에서 동작한다.
그렇다면 일단 java하고 비슷하다고 생각하면서,
함수형언어로써 뭐가 다른지 봐야할것 같다.
1. scala 변수 선언 var, val
scala에서 변수를 선언하는 방법은 두가지다.
var 그리고 val
val : 변경불가, java의 final과 같은개념 var : 변경가능
val 으로 선언한 이후에 이것을 변경하려고 하면 error가 발생한다.
scala> val x = 1 x: Int = 1 scala> var y = 1 y: Int = 1 scala> x = 2 <console>:14: error: reassignment to val x = 2 ^ scala> y = 2 y: Int = 2
var로 선언해서 int로 타입변환이 자동으로 이루어지는게 javascript와 유사하다.
2. RichInt,RichDouble,RichChar,StringOps
scala가 가지고 있는 조금 특별한 클래스다,
용도는 int,double,char, string들에게 조금 더 많은 함수를 사용하기 위해 만들어진 클래스라고 한다.
즉 string 타입의 경우 stringOps의 함수를 사용할 수 있게끔 내부적으로 변환해준다.
http://www.scala-lang.org/api/current/#scala.runtime.RichInt http://www.scala-lang.org/api/current/#scala.runtime.RichDouble http://www.scala-lang.org/api/current/#scala.runtime.RichChar http://www.scala-lang.org/api/current/#scala.collection.immutable.StringOps
3. a+b = a.+(b)
scala에서 '+'는 'a'라는 클래스의 메소드 이름이다. 그러면 b는 자연스레 '+' 메소드의 파라미터가 된다.
- '+' 라는 특수문자도 메소드의 이름으로 사용할 수 있다.
- 같은 '+' 라는 산술연산이 아니라 해당 클래스에 정의된 method이다.
(물론 숫자타입에서는 산술로, 문자타입에서는 strcat 으로 정의되어있다.)
scala> x + y res25: Int = 3 scala> x * y res26: Int = 2 scala> var z = "asdf" z: String = asdf scala> z+z res27: String = asdfasdf scala> z*3 res28: String = asdfasdfasdf
댓글
댓글 쓰기