Scala 2.10 이 release 되었다.
새로운 기능들과 성능 향상을 기대할 수 있다.
개인적으로 Scala 2.10 에서 String Interpolation 과 Value Class 를 이용하여 Type Conversion 을 사용하는 것을 꼽을 수 있겠다. :)
아래 코드들은 아래 링크에서 발췌하였다.
http://blog.typesafe.com/announcing-scala-210-a-simpler-way-to-tackle
새로운 기능
1. String Interpolation (문자열 삽입법)
문자열을 삽입하기 위하여 s 다음에 " (double quote)로 둘러쌓은 다음, $ 를 변수 앞에 붙인다.
println(s"The word of the day is ‘$wordOfTheDay’.")
아래와 같이 수식을 삽입할 수도 있다. ${... } 와 같이 $ 와 { (Curly Brace)로 둘러 쌓아주면 된다. 이렇게 하면 String Interpolator 가 수식을 평가하므로써, Type Safe 한 코드를 작성할 수 있다.
// log only two digits after the decimal to display as seconds log.info(f"Time elapsed: ${millisElapsed/1000.0}%.2fs.")
2. Asynchronous Programming model (비동기식 프로그래밍 모델)
- Play 와 Akka 를 개발하는 개발자 들에게 엄청나게 많은 비동기 요청을 동시에 보낼 수 있도록 허용한다.
def profile(user: User) = Action { Async { for { lastPostId <- user.fetchLastPostId posts <- fetchPosts(user, lastPostId) avatar <- user.fetchAvatar } yield Ok(views.html.profile(user, posts, avatar)) } }
위와같이 단순한 코드로 Scala, Play, Akka 프로그래밍을 동시성을 고려하고, 간단하고, 정확한 코드를 작성할 수 있다.
3. Value Class (값을 위한 클래스)
- Scala 2.10 에서는 runtime 시에 오버헤드를 줄이기 위해서 Value Class 를 제공한다. 이 Value Class 를 이용하여 추가적인 객체 생성 없이 프로그램이 구동되게 할 수 있다.
아래 코드는 integer 값을 16진수를 의미하는 문자열로 돌려주는 일을 하는 클래스를 정의한다. RichInt 클래스는 AnyVal 이라는 클래스를 상속받아서 Value 클래스의 기능을 이용한다.
class RichInt(val self: Int) extends AnyVal { def toUpperHexString: String = java.lang.Integer.toHexString(self).toUpperCase}
Value 클래스의 기능에 대해서 자세히 알고 싶으면 아래 링크를 참고하면 된다.
http://docs.scala-lang.org/overviews/core/value-classes.html
아래 코드에서 new RishInt(2) 는 Scala 에 의해서 자동으로 최적화 과정을 거쳐서 인스턴스가 항상 Int 의 instance 로 고정되게 한다. 그래서 이코드는 실행 시간을 단축시키고 메모리를 적게 사용하도록 한다. :)
val x = new RichInt(2) // at run time, x is simply an integer! x.toUpperHexString
아래의 코드는 위와같이 새로운 인스턴스를 생성하는 bolier plate 코드를 작성하지 않고 바로 Value 클래스를 사용하도록 implicit 키워드를 사용한다.
implicit class RichInt(val self: Int) extends AnyVal { … } 2.toUpperHexString // no explicit wrapping required anymore!
이에 대한 자세한 예제는 Outsider 님의 블로그에 자세히 나와 있기 때문에 추가적인 설명은 필요 없어서 생략하도록 한다.
Outsider 님의 Value 클래스에 대한 글
http://blog.outsider.ne.kr/895?category=40
4. 스칼라가 사용자들을 위해 각기 다른 언어 레벨을 사용할 수 있도록 방법을 제공한다.
성능 향상
1. Pattern-Matcher 가 견고하고 사용자에게 친숙한 에러 메시지를 출력하도록 코드가 다시 작성 되었다.
2. JDK 1.5, 1.6, 1.7 을 지원하고 보다 빠른 byte code 생성을 위해서 byte code 생성기가 ASM 을 사용한다.
3. scaladoc 이 비명시적으로 추가된 멤버변수 와 상속 도표와 멤버변수 그룹화를 한다.
4. 실험적인 기능인 Macro 와 Reflection 을 제공한다.
5. Dynamic trait 이 동적 타입인 객체 사용을 위해 편리한 방법을 제공한다.
보다 자세한 내용과 원문을 보고 싶으면 아래 링크를 참고하면 된다.
http://blog.typesafe.com/announcing-scala-210-a-simpler-way-to-tackle
더 읽을 거리 (Value Class)
http://docs.scala-lang.org/overviews/core/value-classes.html
'Programming > Scala' 카테고리의 다른 글
Scala - 함수를 사용할 때 (...) 과 {...} 의 차이 (0) | 2013.03.13 |
---|---|
Scala Days - 스칼라 모임 (0) | 2013.02.28 |
Set 간단 팁 (0) | 2012.11.27 |
Scala - Application (Scala 언어 응용프로그램) (0) | 2011.11.10 |
Scala - Implement rational number (Scala 언어로 유리수 구현) (0) | 2011.11.10 |