[swift] 구조체와 열거형의 함수형 프로그래밍에서의 활용 방법

함수형 프로그래밍은 프로그램을 작성하는 개념을 더 작은 부분으로 세분화하고, 각 부분을 함수처럼 취급하여 작성하는 패러다임입니다. Swift 언어에서 구조체와 열거형은 함수형 프로그래밍에서 중요한 역할을 할 수 있습니다.

구조체에서의 함수형 프로그래밍 활용

구조체는 값 타입으로, 함수형 프로그래밍에서 변경을 가하는 전혀 새로운 인스턴스를 생성 함으로써 변경을 피해갈 수 있습니다. 또한, 구조체는 불변성을 가지고 있기 때문에 함수형 프로그래밍에서 중요하게 다뤄집니다. 구조체를 사용하여 함수형 프로그래밍을 할 때에는 불변성을 유지하면서 새로운 값을 만들어내는데에 초점을 맞출 수 있습니다.

struct Point {
    var x: Int
    var y: Int
    
    func adding(_ other: Point) -> Point {
        return Point(x: x + other.x, y: y + other.y)
    }
}

위 예시에서 adding 함수는 Point 구조체의 새로운 인스턴스를 반환합니다. 이렇게 함으로써 원래의 구조체를 변경하는 것이 아니라, 새로운 값을 생성하여 변경을 피할 수 있습니다.

열거형에서의 함수형 프로그래밍 활용

열거형은 서로 다른 유형을 나타내는 불변적인 값을 정의할 수 있는 강력한 방법입니다. Swift의 열거형은 Associated ValuesPattern Matching을 사용하여 함수형 프로그래밍에서 매우 유용하게 사용될 수 있습니다.

enum Result<Value, Error> {
    case success(Value)
    case failure(Error)
    
    func map<T>(_ transform: (Value) -> T) -> Result<T, Error> {
        switch self {
        case let .success(value):
            return .success(transform(value))
        case let .failure(error):
            return .failure(error)
        }
    }
}

let result: Result<Int, String> = .success(10)
let mappedResult = result.map { $0 * 2 }

위 예시에서 map 함수는 열거형 Result의 값을 변경하지 않으면서 새로운 Result를 반환합니다. 이를 통해 함수형 프로그래밍의 기본 아이디어 중 하나인 불변성을 유지하면서 값을 변환할 수 있습니다.

결론

구조체와 열거형은 Swift에서 함수형 프로그래밍을 적용할 때 매우 강력한 도구로 사용될 수 있습니다. 불변성과 값을 반환하는 방식으로 디자인된 구조체와 열거형은 함수형 프로그래밍 패러다임과 잘 맞아떨어집니다. 따라서, Swift 개발자는 구조체와 열거형을 적극적으로 활용하여 함수형 프로그래밍을 구현할 수 있습니다.

참고 자료