chap 14. 패턴매칭과 케이스클래스

1. switch-case
scala> ch match {
     |   case '+' => 1
     |   case '-' => -1
     |   case _ => 0
     | }
스칼라에서 사용하는 switch-case 이다.

_ 으로 default 문의 역할을 할 수 있다.
break 문이 안보이는게 기본적인 특징이다.
스칼라에서는 match-case를 자바보다는 좀더 자주 사용하는듯하다.


2. 가드
가드를 사용할 수 도 있다.
scala> ch match {
     |   case i if i == 1 => "one"
     |   case i if i == 2 => "two"
     |   case _ => "some other number"
     | }
scala> ch match {
     |   case x : Int => x
     |   case s : String => Integer.parseInt(s)
     |   case _ : BigInt => Int.MaxValue
     | }

그리고 변수를 활용하기도하고, asInstanceOf와 같은 형식으로도 많이 사용한다.
switch-case문을 조금더 동적으로, 제네릭하게 사용할 여지가 생긴다.


3. case class
패턴칭매에서 편하기 사용하기 위한 클래스이다.
 - new를 사용하지 않고 인스턴스를 생성 가능
 - toString, equals, hashCode, copy 메소드 생성
scala> case class Calculator(brand: String, model: String)
defined class Calculator

인스턴스생성
scala> val hp20b = Calculator("hp", "20b")
hp20b: Calculator = Calculator(hp,20b)

케이스 매칭함수
scala> def calcType(calc: Calculator) = calc match {
     |   case Calculator("hp", "20B") => "financial"
     |   case Calculator("hp", "48G") => "scientific"
     |   case Calculator("hp", "30B") => "business"
     |   case Calculator(ourBrand, ourModel) => "Calculator: %s %s is of unknown type".format(ourBrand, ourModel)
     |   case _ => "Calculator of unknown Type"
     | }
calcType: (calc: Calculator)String

scala> calcType(hp20b)
res37: String = Calculator: hp 20b is of unknown type



댓글

이 블로그의 인기 게시물

[spring] log4j 설정 및 사용법

[linux] 백그라운드 작업 nohup [xxx.sh] &

[spring] 인터셉터 와 필터