Programming🧑‍💻/Functional Programming

함수형 프로그래밍이 선언적인 이유

생각 깎는 아이 2025. 2. 17. 22:49
 

SwiftUI와 UIKit 뷰 구성하는 법 비교하기 ( 선언형, 절차형 패러다임 비교)

SwiftUI - 선언형 프로그래밍선언형 프로그래밍에서는 "무엇"을 원하는지를 코드로 작성합니다.개발자는 원하는 결과를 설명하고, 시스템이 그 결과를 어떻게 달성할지 결정합니다.SwiftUI 예제다

people-analysis.tistory.com

이전에 SwiftUI와 UIKit에서 뷰를 구성하는 방법을 비교하면서 선언적 프로그래밍과 함수형 프로그래밍을 서로 비교해 봤는데요. 

최근에 함수형 프로그래밍을 접하면서 함수를 이용해 값의 입력과 출력을 다루는 게 마치 SwiftUI에서 값 변경을 감지해 이를 화면에 반영하는 뷰 랜더링 사이클과 비슷하다는 느낌이 들었습니다.

그래서 함수형 프로그래밍이 왜 '선언적'이라고 불리는지, 그리고 어떤 이점이 있어서 다들 함수형 패러다임 하는지 알아보려 합니다.

 

일단 짧게 선언적 프로그램이 뭔지 다시 살펴보면 

선언적 프로그래밍이란?

선언적 프로그래밍은 프로그램의 로직을 '어떻게(How)'수행할 것인가 아닌, '무엇(What)'을 수행할 것인가에 초점을 맞춥니다. 

즉, 우리가 원하는 결과를 명시하고, 그 결과를 얻기 위한 구체적인 단계들은 추상화하는 방식입니다. 

 

위의 설명을 좀 더 명확히 하기 위해 명령형(How)과 선언형(What)이 어떻게 다른지 예를 들어보겠습니다. 

숫자 배열에서 짝수만 골라내어 두 배로 만드는 작업을 수행한다 했을 때

명령형 접근 방식은 다음과 같습니다. 

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var result: [Int] = []

// 각 단계를 명시적으로 작성
for number in numbers {
    if number % 2 == 0 {
        let doubled = number * 2
        result.append(doubled)
    }
}

// result는 [4, 8, 12, 16, 20]

"for 루프를 통해 배열을 순회하며, 짝수인지 확인하고, 맞으면 결과 배열에 두 배를 해서 넣는다."와 같이 위의 작업을 수행하기 위한 방법을 일일이 기술합니다. 그에 비해 함수형 접근 방식은 

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let result = numbers
    .filter { $0 % 2 == 0 }
    .map { $0 * 2 }

// result는 [4, 8, 12, 16, 20]

순회나 추가와 같이 배열의 원소들을 어떻게 다루는지에 대한 언급은 filter, map으로 대체해 버리고 { } 코드 블록 내부에는 내가 원하는 결과(짝수, 두 배)만 명시합니다. 

함수형 프로그래밍이 선언적인 이유

함수를 값으로 사용

함수형 프로그래밍에서는 함수를 일급(객체)으로 취급합니다. 이는 함수를 변수에 할당하거나 다른 함수의 인자로 전달할 수 있다는 의미입니다. 따라서 함수를 이용해 구체적인 동작을 캡슐화해 놓으면 비즈니스 로직을 작성할 때 세부사항을 신경 쓰지 않고 무엇을 할지만 명확히 하면 됩니다. 

 

일급객체가 뭔데?

프로그래밍을 하다 보면 '일급 객체'라는 단어를 접하곤 하는데요. 이 '일급'이라는 어감과 실제 설명하는 내용 사이에 간극이 있습니다. 그래서 오늘은 어원부터 출발해서 일급객체가 실질적

people-analysis.tistory.com

순수 함수를 통한 추상화 

순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 부작용이 없습니다. 이러한 특성 때문에 함수의 동작을 예측 가능하게 만들어 여러 함수를 조합하여 사용할 수 있게 됩니다. 즉 여러 간단한 함수들의 체인을 이용해 복잡한 로직을 추상화할 수 있어 입력과 출력만 고려하여 로직 작성이 가능해집니다. 

 

순수 함수란?

수학에서 f(x) = x + 1 같이 함수는 x에 특정 값을 넣으면 항상 동일한 결과가 나옵니다. 프로그래밍에서 순수 함수도 이와 같은 원칙을 따릅니다. 항상 단일 값을 반환합니다 (동일한 입력에 대해

people-analysis.tistory.com

 

끝으로 다시 정리해 보면 함수형 프로그래밍이 선언적인 이유는

함수의 일급 객체로서의 유연성과 순수 함수로서의 안정성에 기반한 복잡한 로직의 추상화 덕분에 

실제 비즈니스 로직 작성 시 세부 구현은 신경 쓰지 않고 무엇을 할지에만 집중할 수 있기 때문입니다.