Either를 이용한 Java의 functional error handling


Java 예외 처리는 try ~ catch를 통해서 할 수 있습니다만, method chaining 하는 도중에 예외처리하는 것이 functional programming적으로 바람직하지는 않습니다. 이러한 문제에 대한 대안으로 Scalar 에서는 Either와 Try를 제공합니다.

Either는 Pair(또는 tuple)와 비슷한데, left와 right의 둘 중 하나의 상태만 가질 수 있습니다. 예를 들어 예외를 반환해야 하는 경우 다음과 같이 처리 할 수 있습니다. (2번째 link의 코드를 를 약간 수정합니다)
private static final int MARKS_NOT_ACCEPTABLE = 0;

private static Either<Integer, Integer> computerWithEither(int marks) {
if (marks < 85) {
return Either.left(MARKS_NOT_ACCEPTABLE);
} else {
return Either.right(marks);
}
}
이렇게 정의하면 다음과 같이 호출합니다.
computeWithEither(80)
.right()
.filter(...)
.map(...)
// ...
Vavr의 Either는 오른쪽 값에 bias가 있습니다. 그래서 map()이나 flatMap() method에 전달되는 연산은 
  1. Either가 left 값을 가지는 경우는 아무런 연산을 하지 않고 Either가 반환
  2. Either가 right 값을 가지는 경우는 전달된 연산이 수행
됩니다. (Monad) 이 경우 Exception 대신에 왼쪽 값을 Error로 전달해서 Chaining이 가능합니다.

Galaxy Watch 사용기 HW

웨어러블 기기에 대해서 길을 헤메던 듣보잡들에게 애플이 친히 시계라고 정의 해 주셨고, 그에 맞추어서 삼성을 기존의 기어 시리즈의 후속작으로 갤럭시 워치를 출시했습니다.

이전에 기어 핏 프로 2 같은 물건을 구매 한 적이 있었는데 24시간동안 그걸 차고 있을 이유를 못느꼈었습니다. 하지만 갤럭시 워치를 차고 다니면서 그래도 이제는 내 액티비티 트래커로는 쓸만하다는 생각이 듭니다. 
  

별다른 버튼을 누루지 않아도 걷기, 심박수, 잠자기 내용은 자동으로 추적 해 주기 때문에 달리기 할 때에도 어디를 갈 때에도 되도록이면 꼭 차게 됩니다.

다면 알림과 시계, 액티비티 트래커 이외 별다른 용도는 모르겠네요. 저 세 가지만으로도 충분히 의미가 있긴 하지만 조금 아쉽네요.


Samsung Health Ecosystem

Samsung Digital Health Platform and SDK 에 이어서 또다시 SDC 2018에 발표했습니다.





1 2 3 4 5 6 7 8 9 10 다음