티스토리 뷰

일급함수

일급함수란 값으로 함수를 다루는 것을 의미한다.

순수함수(Pure function)

동일한 input이 주어질 때, 동일한 output이 나오는 함수를 순수함수라고 한다. 순수함수는 함수 내부에서 외부값을 참조하지 않는다. 오직 주어진 인자에 대해서만 작업을 수행하기 때문에 결과 예측이 가능하다. 함수형 프로그래밍에서 가장 중요한 것은 순수함수를 만들어내는 것이라고 생각한다. 순수함수는 테스트하기에 매우 용이하다.

고차함수(Higher-order function)

함수를 인자로 전달 받거나, 함수를 return하는 함수를 의미한다. 쉽게 말해 중접되어 있는 함수이다. 함수형 프로그래밍에서는 함수를 값으로 다루기 때문에 parameter나 return 값으로 사용이 가능한 것이다. 함수형 프로그래밍에서는 순수함수를 사용하기 때문에 인자로 들어오는 함수도 순수함수이어야 한다. 

무상태(Stateless)

객체는 상태와 행위를 갖는다. 하지만, 함수형 프로그래밍에서는 상태를 가지지 않는다. 어떤 상황이든 상태를 가지지 않기 때문에 같은 input에서 같은 output을 보내주는 순수함수로 작동하는 것이다.  

불변성(Immutable)

상태를 변경시키지 않는다. 주어지는 데이터의 상태를 변경하는 것은 부수효과(side effect)를 발생시키기 때문에 함수형 프로그래밍은 불변성을 유지한다. 따라서 데이터의 변경이 필요하다면 새로운 상태를 가지는 데이터를 만들어 덮어 씌우는 방식으로 작동하는 듯 하다.

함수형 프로그래밍 만들기

1. ✨함수의 역할을 정의한다. (가능한 역할을 작게 구성해야 한다)

2. 순수함수로 만든다.

3. 함수를 값으로 처리하여 함수들을 연결해서 하나의 프로세스를 만들어 낸다.

 

함수형 프로그래밍은 예측가능하다! 각각의 동작하는 순수함수를 조립한 형태이기 때문이다. 따라서 테스트하기에도 매우 편리하다. 추가, 삭제시 전체적인 구조를 변경하는 것이 아니라 함수를 추가하고 삭제하는 것으로 조정이 가능하다. 함수형 프로그래밍은 데이터 처리를 할 때, 데이터의 불변성을 유지하며 원하는 조건으로 필터링하기에 매우 적합하다고 한다. 함수형 프로그래밍의 가장 큰 장점 중 하나는 함수를 컴포넌트 단위로 조립가능하다는 것이라고 생각한다. 각각의 기능을 하는 함수들을 레고처럼 조합하여 기능하는 프로세스를 만들게 된다.

 

하나의 큰 함수 공장을 만든다고 생각하며 함수형 프로그래밍을 공부했다. 이런 개념을 보면서 React가 많이 생각났다. React 컴포넌트들은 props라는 상태를 받아서 각 컴포넌트를 작동하며 데이터를 수정할 때도 변경된 새로운 객체를 만들어 덮어 씌워주는 방식으로 진행한다. 

함수형 프로그래밍과 객체지향 프로그래밍

객체지향은 관계와 객체가 단위가 되고, 함수형 프로그래밍은 순서와 함수가 단위가 된다. 객체지향은 관계에 초점이 맞춰져 있다면 함수형은 선언적이며, 절차지향적이다. 객체지향은 적절한 상황에 맞는 객체와의 관계를 맺고 끊는다. 함수형 프로그래밍은 어떤 절차에 맞춰 진행할 것인지를 제시한다.

 

객체지향과 함수형 프로그래밍은 방법이 다르지만, 내부에는 결국 책임을 작게 만들어서 변경할 일이나, 테스트 상황이 발생할 때 그 원인을 빠르게 찾고 분석하기 위함이라고 생각한다. 따라서 어떤 방식으로 프로그래밍을 하든 내부 함수, 메소드, 객체의 책임과 역할을 분명히 하는 것이 기반된다고 생각한다.

정리

OOP나 FP는 모두 사람을 위한 것이다. 컴퓨터는 어떤 방법을 사용하든 컴파일되는데 상관없다. 개발자가 유지보수, 관리를 편하게 하기 위해서 사용하는 방법적 도구인 것이다. 따라서 어떤 프로그래밍을 하든 그것 자체를 구현하는게 목적이 아니라, 사람을 위한 프로그래밍 설계가 되어야 한다. 

 

OOP, FP 둘 다 너무 어려운 개념이지만, 다른 방법론적 접근을 할 수 있다는 것이 흥미로웠다. 함수형 프로그래밍을 만들기 위해 JS에서는 함수를 값으로 할당하는 것이 자체는 어렵지 않았는데, Java에서는 FunctionalInterface를 사용하는 것이 많이 어려웠다. 하지만, 함수형 프로그래밍 연습을 하면서 람다, 스트림, 함수형 인터페이스 사용에 조금은 더 익숙해졌다. 함수형으로 메소드를 작성하는 것은 반복되는 코드들이 이미 정의된 함수를 사용하기 때문에 편리한 점이 상당히 많다. (map, filter 등등 굳이 for 문을 작성할 필요가 없다)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함