[Scala] Lift

smlee·2023년 10월 3일
0

Scala

목록 보기
36/37
post-thumbnail

Partial Function을 사용하면 특정 부분 집합에 대한 함수를 정의할 수 있다. (Partial Function이 무엇인지 기억이 나지 않는다면 Partial Function을 정리한 포스트에서 확인할 수 있다.)

대표적인 예가 밑과 같은 코드이다.

type Divide = (Double, Double)

val div:PartialFunction[Divide, Double] = {
case (x, y) if y != 0 => x/y
}

Double형인 2개의 데이터를 입력 받았고, 분모 역할을 하는 두 번째 수가 0이 아닐 때 선언된 함수이다.

예제 Partial Function은 위와 같이 사용된다. Partial Function은 isDefinedAt 메서드를 통해 값들을 체크할 수 있지만 번거롭기도 하다.

물론 validation을 위한 함수를 위와 같이 작성해도 된다. 실제로 잘 동작하기도 하지만 scala에서 lift를 사용하여 나타내는 것이 더 관용적이다.

def safeDivide(input:Divide) = {
	div.lift(input).map(result => s"나눗셈의 결과값은 ${result}입니다.").getOrElse("0으로 나눌 수 없습니다.")
}

위의 lift method를 사용한다면 isDefinedAt을 사용하여 validation을 구현한 함수와 똑같이 동작하는 것을 알 수 있다.

lift를 사용하면 PartialFunction[Divide, Double]이었던 divFunction[Divide, Option[Double]]이 된 것이다.


lift 메서드의 또다른 사용 용례로는 index out of bound를 피하기 위한 용례이다.


위에서 볼 수 있듯, 인덱스를 벗어나는 11을 입력해도, lift를 사용한다면 Exception 대신 None을 리턴하는 것을 알 수 있다.

Reference

0개의 댓글