티스토리 뷰
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 |