스칼라
-
Scala Pattern Matching(패턴매칭)Scala 2014. 6. 13. 09:00
입력받은 매개변수가 어떤 케이스에 해당하는지에 따라서 그 다음 연산을 처리함. 다른 언어의 switch와 비슷한 기능을 하지만, 단순히 int형만을 매치하는 것이 아니라 다양한 타입에 대해서 매치가 가능하기 때문에 더 강력하고 유용함. object MatchTest1 { def matchTest(x: Int): String = x match { case 1 => "one" case 2 => "two" case _ => "many" } //]]> matchTest: (x: Int)String println(matchTest(1)) //]]> one println(matchTest(2)) //]]> two println(matchTest(3)) //]]> many def matchTest2(x: Any): ..
-
Scala Currying(커링)Scala 2014. 6. 11. 09:00
Currying : 인자가 여러개 있는 함수를 하나의 인자를 가진 함수의 체인형태로 만들어 주는 것. f:(X*Y) -> Z 형식의 함수가 있을때 이것을 currying하면 curry(f): X -> (Y - > Z) 형태로 만듬. 예) f(x, y) = y/x 의 원본함수가 있다고 했을때 f(2, 3)의 값을 계산하려고 한다면 우선 2를 x에 대입함. 그렇게 되면 함수는 f(2, y) = y / 2 의 형태가 됨. 이때 f(2, y)를 g(y)라는 새로운 함수라고 볼 수 있음. 결국 g(y) = f(2, y) = y/2 라고 볼 수 있음. 이 g(y)의 y에 3을 입력하면 g(3)이 되고, g(3)는 g(3) = f(2, 3) = 3/2 이런형식이 되는걸 알 수 있음. 코드예) 아래 코드에서 보면 mo..
-
Scala Traits(트레잇)Scala 2014. 6. 6. 09:00
스칼라는 기본적으로 하나의 슈퍼클래스만 가질수 있음. 여러개를 상속하기위해서는 자바의 인터페이스처럼 트레잇을 사용하면 됨. 트레잇이 자바 인터페이스와 다른점은 메소드를 선언하는것뿐만 아니라 구현을해도 된다는점. trait Similarity { def isSimilar(x: Any): Boolean def isNotSimilar(x: Any): Boolean = !isSimilar(x) } class Point(xc: Int, yc: Int) extends Similarity { var x: Int = xc var y: Int = yc def isSimilar(obj: Any) = obj.isInstanceOf[Point] && obj.asInstanceOf[Point].x == x } object Tr..
-
Scala Class, Object(클래스, 오브젝트)Scala 2014. 6. 2. 09:00
클래스 따로 생성자가 없음. 메소드 바깥에 있는 코드들이 생성자 역할을 하게됨. 상속해서 메소드를 재정의할때는 override 를 명시해 줘야 함. 오브젝트(object) 싱글톤인 객체. 스칼라에는 따로 전역 멤버를 가지지 않고 오브젝트를 사용함. 클래스, 클래스상속, 오브젝트 예제. class Point(xc: Int, yc: Int) { var x: Int = xc var y: Int = yc def move(dx: Int, dy: Int) { x = x + dx y = y + dy } override def toString(): String = "(" + x + ", " + y + ")"; } class SubPoint(xc: Int, yc: Int, zc: Int) extends Point(xc,..
-
Scala 함수Scala 2014. 5. 30. 09:00
변수 선언부분에서도 나왔지만 스칼라는 변수의 타입을 변수명 뒤에 씀. 함수의 반환형도 함수 매개변수들 뒤에 씀 def 함수명( 변수명: 변수타입 ) : 반환타입 = {} 반환할때는 return을 이용해서 반환가능하지만, 스칼라 컨벤션은 return을 사용하지 않는 것이 기본임. object test { def sum(a: Int, b: Int) : Int = { a + b } //]] > sum: (a: Int, b: Int)Int println("10 + 3 = ", sum(10, 3)) //]] > (10 + 3 = ,13) }
-
Scala 루프구문Scala 2014. 5. 28. 09:00
while 루프 while 조건이 만족하는동안 루프를 순환 object test { var a = 10 //]] > a : Int = 10 while(a (a = ,10) //| (a = ,11) //| (a = ,12) //| (a = ,13) //| (a = ,14) //| (a = ,15) } do, while 루프 우선 {} 블럭으로 묶인 부분을 한번 실행한 후 while 조건이 만족하는동안 루프를 순환 object test { var a = 10 //]] > a : Int = 10 do{ println("a = ", a) a += 1; }while(a (a = ,10) //| (a = ,11) //| (a = ,12) //| (a = ,13) //| (a = ,14) //| (a = ,15) }..
-
Scala 연산자Scala 2014. 5. 23. 09:00
산술연산자 + : 두 값을 더함 - : 두 값의 차이를 계산 * : 두 값의 곱을 계산 / : 두 값을 나눔 % : 나머지 연산 object test { var a = 10 //]]]] > a : Int = 10 var b = 3 //]]]] > b : Int = 3 println("a + b = ", a + b) //]]]] > (a + b = ,13) println("a - b = ", a - b) //]]]] > (a - b = ,7) println("a * b = ", a * b) //]]]] > (a * b = ,30) println("a / b = ", a / b) //]]]] > (a / b = ,3) println("a % b = ", a % b) //]]]] > (a % b = ,1) }..