[컴] Scala 문법 정리


정리중...

 

Option[T] 사용

이것은 null 값에 대한 처리 하려고 만들어졌다. None 을 가질 수 있다고 이야기 해주는 type 이다. None 을 가질 수 있는 type 이라면, Option[T] 를 이용하자.


val user = User(2, "Name", 30, None)
user.gender match {
  case Some(gender) => println("Gender: " + gender)
  case None => println("Gender: not specified")
}

Some() class

private var localAddress: Option[InetSocketAddress] = None
...
InetSocketAddress address = "10.10.10.10";
localAddress = Some(address)

위의 code 를 보고 궁금한 것은 왜 Some 을 사용하느냐 이다. 그것은 localAddressOption[InetSocketAddress] type 으로 정의해 놨는데, InetSocketAddress 값을 직접 assign 할 수 없기 때문이다. 이것을 Option[] type 으로 casting 해주는 역할을 Some() 이 하는 것이라고 보면 된다.

getOrElse

이것은 Option 의 value 가 없으면 None 을 return 해준다.

result.getOrElse('unknown')

이면 result 값이 None 이면, unknown 을 return 해준다.


implicit parameter

사용법

  • def function_name (value1 : type)(implicit value2 : type)
  • 사용: function_name(1)(10)

parameter 로 값이 넘어오지 않으면, 일단 implicit val value 들을 찾는다. 그래서 그중에서 사용할 수 있는 것을 사용한다.

이것을 간단하게 이해하려면, 아래와 같은 default value 를 넣어주는 code 를 생각해보면 될 듯 하다. myFunction(a, b=10){}

위와 같은 경우도 myFunction(1) 을 호출하면 myFunction(1, 10) 을 호출한 것 처럼 동작한다.

다만 이 implicit 은 type 에 대한 고려도 해주고, default 값을 한개가 아니라, type 에 따라 다르게 설정할 수도 있는 것이다.(예제 확인)

parameter 에 _*

val sumable = Seq(4, 5, 10, 3)
val sumOfSumable = sum(sumable: _*) // convert the sequence sumable to varargs using sumable: _*
assertEquals(sumOfSumable, 22)

sumable: List 라면 List type 의 sumable 이라는 의미가 된다. sumable: _ 이면, any type 이 된다. 그런데 여기에 * 을 더했으니, 이것은 여러개의 _ 를 뜻하는 것으로 보면 될 듯 하다. 그래서 이것은 varargs 로 변환하는 것으로 보면 된다.

기타


 

Reference

  1. The Neophyte's Guide to Scala Part 5: The Option type

댓글 없음:

댓글 쓰기