Skip to content
zer0wiz edited this page Sep 26, 2016 · 16 revisions

7.5 마치며

for 내장 - 루프의 강력한 도구

  • map
  • flatmap
  • foreach
  • withFilter
  • for.. yield 는 상황에 따라 foreach, flatmap, filter, map으로 변환되어 리턴할 수 있음.

단순하지 않은 어플리케이션을 작성하기 위해 간결하고 유연하지만 강력한 도구

  • Option : scala 언어에서 에러 처리(Exception Handling)를 위해 사용. Exception이 발생하면 이를 None으로 만듬.

  • util.Either : Option에 섬세한 구현을 하고 싶다면, "왜 None인지에 대한 정보"를 리턴하면 좋을 것인데, 이는 Option[T]의 설계 철학상 불가능하다. 즉, 에러인 경우 None이 아니라, Some("error: bad number format") 따위의 에러를 의미하는 Some[T]를 리턴해야 하는데, - None은 Nothing이므로 String을 실어보낼 구조가 안된다 -, 이건 의미적으로 Option[T]의 설계 의도를 거스르는 것이다. scala Either[A, B] 타입은 이런 경우에 대한 대안이다

  • util.Try : cala.util 패키지의 Try를 통해 실행시키면, exception은 Failure 객체로 변환될 뿐, exception은 더 이상 발생하지 않는다.

  • scalaz.Validation : 결과가 비어 있거나 실패인 경우, 그다음 오는 콤비네이터는 호출 되지 않는다. 즉 오류가 처음 발생한 위치에서 처리를 멈춘다. 전체를 수정하고 그과정중에 오류를 수집한다음 나중에 수정할 경우, 표준 라이브러리에서 지원하지 않는 타입이지만, 외부 라이브러리인 스칼라 제드를 사용.

Either, Try, Validation은 타입을 사용해서 프로그램이 실제로 어떻게 동작하는지에 대한 그림을 더 완전하게 표현한다.

이들음 모두 올바른 값이 반환될 것임을 알려주며, 그렇지 않은 경우에는 여러분이 알아야하는 실패에 대한 정보를 감싸서 돌려준다. 비슷하게 Option은 값의 존재나 부재를 감싸서 타입 시그니처에 명시한다.

이런 타입을 사용해서 예외를 실체화 함으로써 동시성의 중요한 문제를 풀 수 있다. 비동기 코드는 '호출자'와 같은 스레드에 실행된다는 보장이 없기 때문에 호출자가 다른 코드에서 발생한 예외를 잡을 수 없다. 하지만 일반적인 결과를 반환하는 것과 동일한 방식으로 예외를 반환한다면 호출자가 그 예외를 받을 수 있다.

올포원 전략 원포원 전략 이런 구조들은 갈끔하게 일반처리와 오류 처리 로직을 분리한다 ... 액터가 중단되도도록 내 버려둘지 에 대한 원칙을 세울 수 있다.

참고 17장 615페이지 - Try사용예제

Clone this wiki locally