본문 바로가기

Programming/Scala

Scala - Application (Scala 언어 응용프로그램) Scala 로 응용프로그램을 만들기위해서는 standalone singleton object 를 사용하여 main method 를 제공해야 한다. 이 main method 는 parameter 한개를 입력 받는데, Java 의 main 과 유사하다. main method 를 가지고 있는 모든 standalone object 는 응용프로그램을 실행 할 수 있다. 아래의 코드는 응용프로그램의 인자로 들어온 값들의 check sum 을 알려주는 프로그램이다. import ChecksumAccumulator.calculate object Summer { def main(args: Array[String]) { for (arg 더보기
Scala - Implement rational number (Scala 언어로 유리수 구현) 보통 Java 언어에서는 int type 의 변수와 유리수 type 의 변수를 계산하기 위해서는 lvalue 가 유리수 type 이 아니기 때문에, int type 의 변수를 유리수 type 의 wrapper 클래스를 이용하여, boxing 이라는 과정을 거치고 다시 오른쪽 변수인 유리수 type 의 변수를 인자를 갖는 method 를 호출하여 해결 한다. 예를 들어서, Java 언어로 구현된, 유리수 클래스가 있다고 하자. Rational.java public class Rational { public Rational add(Rational rvalue) { ... } ... // 내부 method 들 구현 생략 } int a = 10; Ratioan r = new Rational (1, 3) // 분.. 더보기
Scala - Pattern matching example 2 (Scala 언어로 패턴 매칭하기) Scala 에서는 Pattern matching 을 할경우, 특수 문자들을 사용하여 수행할 수 있다. 허용되는 특수문자는 @, _, * 들이 있다. 1. "_" : "_" 는 어떠한 것과도 매칭될 수 있는 와일드카드 키워드이다. 예제: 아래에서는 matchChoice 함수에 어떠한 숫자도 입력할 수 있지만, 0 과 1을 제외한 다른 수를 입력하면 Other choices 라는 메시지를 출력한다. def matchChoice(num: Int) = { num match { case 0 => println("Choice is zero") case 1 => println("Choice is one") case _ => println("Other choices") } } 2. "@" : "@" 는 특정 패턴이나 .. 더보기
Scala - Creating IntelliJ Scala project using sbt (sbt 를 이용하여 IntelliJ 용 Scala project 생성하기) Scala 프로그램을 컴파일하고 빌드하기 위해서 sbt 라는 프로그램을 사용한다. sbt 는 Simple Build Tool 의 약자로서, 자바나 Scala 프로그램을 Ant, Maven 과 유사하게 빌드할 때, 사용하는 프로그램이다. sbt 는 단독으로 사용해도 좋지만, IntelliJ IDE 와 같이 사용하면 좀더 편리하게 사용할 수 있다. IntelliJ 의 빌드 방법이 SBT 보다 섬세하고 유연하지 못하기 때문에, 빌드는 sbt 에 맡기고, 소스코드 편집은 IntelliJ 에서 하는 것이 현명한 개발 방법이라고 생각한다. Scala 프로그램을 애초에 IntelliJ 로 프로젝트를 생성하여 계속 작성해 왔다면, 별 문제가 없지만, 그렇지 않은 경우 새로 프로젝트를 생성해야 한다. 하지만 Intell.. 더보기
Scala - Basic calculator using Parser Combinator (스칼라 언어로 만드는 간단한 사칙 연산 계산기 프로그램) Scala 언어에서 지원하는 매력적인 라이브러리가 있는데, 그 중 하나가 Parser Combinator 이다. 이 라이브러리를 이용하면, Parser 를 작성하기가 쉽고, 소스가 이해하기도 쉽다. 그러므로 유지보수도 쉬워진다. 그래서 연습삼아서 계산기 프로그램을 작성해 보았다. 간단하게 사칙연산을 지원하고 숫자는 자연수, 정수, 소수(floating point number) 까지만 지원된다. 소스는 아래와 같다. package parser import util.parsing.combinator.JavaTokenParsers /** * User: starblood * Date: 8/1/11 * Floating point 를 계산하는 프로그램. * Scala 언어에서 지원하는 Parser Combinato.. 더보기
Scala - Pattern matching Scala 에는 pattern matching 이라는 기능이 있는데, Java 언어와 마찬가지로 case 문을 쓰는 것이 비슷하긴 한데, 문법은 약간 틀리다. 기본적인 문법은 아래의 예제를 보면 이해가 쉬울 듯 하다. 1 val firstArg = if (!args.isEmpty) args(0) else "" 2 3 val friend = 4 firstArg match { 5 case "salt" => "pepper" 6 case "chips" => "salsa" 7 case "eggs" => "bacon" 8 case _ => "huh?" 9 } 10 11 println(friend) 1 번째 라인에서는 프로그램의 command line argument 로부터 입력을 받는다. (def main(args.. 더보기
Scala - IDE recommendation (scala 를 위한 개발 IDE 추천) Scala 프로그램을 개발하기 위한 IDE로는 Eclipse와 IntelliJ가 있다. 두 개발 IDE 모두 Scala 개발환경을 plug-in 형태로 제공한다. 먼저 IntelliJ 에서 Scala plug-in 을 설치하려면 IDE의 메뉴 File -> Settings -> Plugins 에서 Scala 를 Available 탭에서 찾은뒤에 설치하면 된다. 두 번째는 Eclipse 에서 Software update 를 통하여 설치하는 것인데, 아래 사이트에서 Eclipse 용 plug-in을 다운받아서 설치하면 된다. http://www.scala-ide.org/ 개인적으로 Java Programming 을 할 때에는 Eclipse 를 더 선호하지만, Scala Programming을 할때에는 Deb.. 더보기
Scala - syntax highlighting for vi vim vi 에디터를 사랑하는 나로서는, 가끔씩 IntelliJ 에서 scala 프로그램을 작성하는 것보다 vi 에디터에서 작성하는 것이 더 편할 때가 있다. 이럴때마다 문법 highlighting 이 되지 않아서 조금 불편해서 이번기회에 설정을 해두기로 했다. 이미 문법이 지원되어서 vim 공식 웹사이트에서 받아가면 된다. 하지만, 받아가는 것은 쉽지만 설정하는 것은 초보자에게 쉽지 않을 거라고 생각이 된다. 그래서 따로 정리를 해두기로 마음을 먹었다. 첨부한 파일을 자신의 HOME 디렉토리의 .vim 디렉토리에 압축 해제한다. $ cd ~/.vim $ unzip scala_vim.zip 이렇게 하면 ftdetect, indent, syntax 라는 3개의 디렉토리가 보이게 된다. 아래의 그림은 vi 에디터에.. 더보기
Scala - side effect 란 무엇인가? 아래와 같은 코드가 있다고 하자. 아래의 코드는 합계를 계산하는 프로그램이다. class ChecksumAccumulator { private var sum = 0 def add(b: Byte): Unit = sum += b // Side Effect 가 있는 함수 def checksum(): Int = ~(sum & 0xFF) + 1 } 여기서 add 함수는 side effect 가 있는 코드이다. side effect 란 일반적으로 file I/O 나, 함수의 바깥쪽에 있는 어떤 상태를 변경시키는 것을 의미한다. 여기서 함수의 바깥쪽에 있는 어떤 상태라는 것은 private var sum 이라는 변수이다. 이 변수는 instance variable 로서 각각의 객체의 상태를 나타내준다. Scala 언.. 더보기
Scala - singleton object Scala 언어가 Java 보다 객체 지향 언어의 개념이라고 할 수 있는 것은 singleton objects 라고 할 수 있다. Scala 언어에서는 static member들을 가질 수 없다. 대신에 Scala 는 singleton objects 라는 것으로 이를 대신한다. singleton objects 의 정의는 class 라는 키워드를 object 라는 키워드로 사용하는 것을 제외하고는 클래스 정의와 비슷하다. 아래는 예제 코드이다. import scala.collection.mutable.Map object ChecksumAccumulator { private val cache = Map[String, Int]() def calculate(s: String): Int = if (cache.co.. 더보기