정리중...
Option[T] 사용
- The Neophyte's Guide to Scala Part 5: The Option type: Option 에 대한 이야기와 여러 사용법을 알려준다.
이것은 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 을 사용하느냐 이다. 그것은 localAddress
를 Option[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 로 변환하는 것으로 보면 된다.
기타
댓글 없음:
댓글 쓰기