[kotlin] Arrow의 프로퍼티 맵핑

Arrow 라이브러리는 Kotlin에서 함수형 프로그래밍을 지원하는 라이브러리로, 모나드, 프로퍼티 맵핑, 렌즈 등의 개념을 제공합니다. 이번에는 Arrow 라이브러리의 중요한 기능 중 하나인 프로퍼티 맵핑에 대해 알아보겠습니다.

프로퍼티 맵핑이란?

프로퍼티 맵핑은 불변성을 유지하면서 데이터 클래스의 속성을 수정하거나 변환하는 기능을 말합니다. Arrow는 @optics 어노테이션을 사용하여 데이터 클래스의 속성을 변경하기 위한 렌즈, 더 그러면 수정될 데이터 클래스의 필드를 가리키는 포커스, 수정된 데이터 클래스를 가리키는 맵핑, 특정 필드를 수정하거나 생성하여 변경된 데이터 클래스의 새 객체를 생성하는 이러한 명세를 정의합니다.

예를 들어, 다음과 같이 @optics 어노테이션을 사용하여 프로퍼티 맵핑을 정의할 수 있습니다.

@optics
data class Street(val number: Int, val name: String) {
  companion object {}
}

Arrow의 프로퍼티 맵핑 사용하기

Arrow의 프로퍼티 맵핑을 사용하려면 @optics 어노테이션을 사용하여 데이터 클래스에 렌즈, 포커스, 맵핑을 추가하고, gen 키워드를 사용하여 관련 타입 클래스를 생성해야 합니다.

아래는 Arrow를 사용하여 Street 데이터 클래스의 프로퍼티를 수정하는 예제입니다.

val street = Street(10, "Arrow Street")
val modifiedStreet = Street.streetName.modify(street) { newName ->
    newName.toUpperCase()
}

위의 코드에서 Street.streetName.modify를 사용하여 Street 데이터 클래스의 name 속성을 대문자로 수정한 새로운 객체를 생성했습니다.

마무리

Arrow의 프로퍼티 맵핑 기능을 사용하여 불변성을 유지하면서 데이터 클래스의 속성을 수정하거나 변환할 수 있습니다. 이를 통해 안전하고 함수적인 방식으로 데이터 변환 및 수정을 수행할 수 있습니다.

참고: https://arrow-kt.io/docs/optics/optics/