JavaScript로 함수형 프로그래밍 배우기를 보고 정리한 글로 예제 코드는 Swift로 대체하였습니다. 😆
프로그래밍 패러다임 중 하나이다. 또 다른 프로그래밍 패러다임으로 명령형 프로그래밍(Imperative Programming)이 있으며, 함수형 프로그래밍과 반대되는 개념이다.
safer, easier to debug/maintain
더 안전하고, 디버깅 및 유지보수에 쉽기 때문이다.
객체 지향 프로그래밍에서 알 수 없는 버그(찾기 어려운 버그)를 경험했다면 함수형 프로그래밍이 대안이 될 수 있다.
1️⃣ 함수형 프로그래밍은 모두 함수로 구현한다.
다음은 명령형으로 작성한 코드를 함수형 프로그래밍 식으로 바꾼 예시이다.
// Not functional
let name = "Lena"
let greeting = "Hi, I'm "
print(greeting + name)
// Hi, I'm Lena
// Functional
func greet(name: String) -> String {
return "Hi, I'm \(name)"
}
print(greet(name: "Lena"))
// Hi, I'm Lena
2️⃣ pure function으로 구현해야 한다.
pure function은 함수가 주변 전역 변수에 의존하지 않고, 오직 함수의 파라미터로 받은 input에만 의존하면서 output을 리턴하는 함수이다.
// Not pure
let name = "Lena"
func greet() -> String {
return "Hi, I'm \(name)"
}
// Pure
func greet(name: String) -> String {
return "Hi, I'm \(name)"
}
3️⃣ 고차 함수를 사용한다.
고차 함수는 함수가 마치 객체처럼 전달인자로 전달될 수 있고, 함수를 리턴할 수도 있는 함수를 의미한다.
함수 안의 함수가 layering 된다.
4️⃣ 함수형 프로그래밍에서는 for
나 while
을 사용하기 보다는 map
, filter
, reduce
와 같은 고차함수를 사용한다.
5️⃣ 변하지 않는 데이터를 만들어 가변성을 피한다.
이를 위해 데이터를 전부 복사하는 것은 효율성이 떨어질 수 있으므로, HashMap이나 Tree 데이터 구조를 활용하는 방법이 있다.
새로운걸 배우고갑니다! 👏🏻