티스토리 뷰

scala

[Scala] Option

sungjine 2017. 11. 11. 12:17
반응형

 Option 타입은 값을 담고 있는 컬랙션으로 값의 존재 여부가 불확실하여 값이 존재할 수 있고 존재하지 않을 수 있다는 것을 나타내기 위한 타입이다. 하위 타입으로 "None"과 "Some"이 있는데 "None"은 값이 존재하지 않는다는 것을 나타내기 위한 타입이고 "Some"은 값이 존재한다는 것을 나타내기 위한 타입이다. 

 

 * Option 생성 방법

 Option(1)은 Some(1)을 Option(null)은 None을 반환한다.

 

 이렇게 Option 타입을 사용하면 가질 수 있는 장점으로 Java와 비교해본다면 NullPointException 에러가 발생할 일이 없어진다는 것이다.

 

 이제 Option이 있을 때와 없을 때를 비교를 해보자 Map<K, V>을 자바에서 호출한다면 V를 반환하고 Scala에서는 Option[V]를 반환한다. Java에서 Map에 없는 키값으로 get 메서드를 실행하면 null을 반환하고 이를 사용하려고 하면 당연하게 NullPointException 에러가 발생한다. 그렇다고 "None" 유형일 때는 에러가 안나냐 하면 그건 아니다. "None" 유형일 때 값을 반환받는 메서드는 여러개가 있는데 그중 get 메서드를 사용하면 NoSuchElementException 에러가 발생한다.

 

 그러면 똑같은거 아닐까 하는 생각을 할 수도 있지만 위와 같은 상황에 사용할 수 있게 Option 타입에서는 값을 꺼낼 수 있는 다른 방법을 제공하는데 getOrElse 메서드를 사용하면 값을 없을 때 사용할 값을 지정할 수 있기 때문에 값이 없을 때를 대비할 수 있다.


 getOrElse 메소드 대신 값이 없을 때 사용할 수 있는 방법으로는 isDefined() 메서드나 isEmpty() 메서드를 사용하여 값이 있는지를 먼저 체크를 한 후에 사용하거나 패턴매칭을 이용하여 사용하는 방법도 있다.

 

 이렇게 null에 대한 대응을 여러가지로 할 수 있기 때문에 Java에서 자주 볼 수 있는 NullPointException 에러에 대해 적절하게 대응할 수 있다.

반응형

'scala' 카테고리의 다른 글

[Scala] sealed 제어자  (0) 2018.06.23
[Scala] unapply 메서드  (0) 2018.05.05
[Scala] apply 메서드  (0) 2018.03.24
[Scala] val, var, def의 차이  (0) 2018.02.28
[Scala] 동반 객체(Companion Object)  (0) 2017.12.24
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31