Functional Programming

Lena·2021년 1월 18일
0
post-thumbnail

JavaScript로 함수형 프로그래밍 배우기를 보고 정리한 글로 예제 코드는 Swift로 대체하였습니다. 😆

Functional Programming

프로그래밍 패러다임 중 하나이다. 또 다른 프로그래밍 패러다임으로 명령형 프로그래밍(Imperative Programming)이 있으며, 함수형 프로그래밍과 반대되는 개념이다.

Why use

safer, easier to debug/maintain
더 안전하고, 디버깅 및 유지보수에 쉽기 때문이다.

객체 지향 프로그래밍에서 알 수 없는 버그(찾기 어려운 버그)를 경험했다면 함수형 프로그래밍이 대안이 될 수 있다.

How use

  • Do everything with functions
  • Avoid side effects (use pure functions)
  • Use Higher oder functions (functions can be inputs/outputs)
  • Don't iterate (use map, filter, reduce)
  • Avoid mutability (use immutable data)

Do everything with functions

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

Pure functions

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)"
}

Higher oder functions

3️⃣ 고차 함수를 사용한다.
고차 함수는 함수가 마치 객체처럼 전달인자로 전달될 수 있고, 함수를 리턴할 수도 있는 함수를 의미한다.
함수 안의 함수가 layering 된다.

4️⃣ 함수형 프로그래밍에서는 forwhile을 사용하기 보다는 map, filter, reduce와 같은 고차함수를 사용한다.

Avoid mutability

5️⃣ 변하지 않는 데이터를 만들어 가변성을 피한다.
이를 위해 데이터를 전부 복사하는 것은 효율성이 떨어질 수 있으므로, HashMap이나 Tree 데이터 구조를 활용하는 방법이 있다.

1개의 댓글

comment-user-thumbnail
2021년 1월 24일

새로운걸 배우고갑니다! 👏🏻

답글 달기