[Tistory] 함수형 프로그래밍 (Function Programming)

원글 페이지 : 바로가기

출처: https://dev.to/navi/why-functional-programming-matters-2o95 함수형 프로그래밍은 무엇인가 : 자료 처리를 수학적 함수의 계산으로 취급하는 프로그래밍 패러다임. 순수 함수와 보조 함수의 조합을 통해 로직 내 존재하는 조건문과 반복문을 제거하여 복잡성을 해결하고 변수의 사용을 억제해 상태 변경을 피하려고 한다. * 다른 패러다임으로 명령형, 객체 지향 등이 있다. 함수형 프로그래밍의 특징 – 부수 효과가 발생하지 않는다. * 부수 효과(Side-Effect)란? : 함수가 만들어진 목적과는 다른 효과, 혹은 부작용 콘솔 또는 파일 I/O || 예외가 발생하여 프로그램 실행이 중단되는 경우 || 데이터가 변경되는 경우 => 위와 이 변화가 발생하는 작업을 부수 효과가 발생한다고 말한다. – 순수 함수가 존재한다. * 위에서 언급한 부수 효과가 없는 함수를 순수 함수라고 일컫는다. – 변경 불가능한 값을 활용한다. * 불변값을 사용하면 병렬성, 동시성 문제를 쉽게 해결할 수 있다. 또한 값을 예측하게 해주어 신뢰를 보장할 수 있다. * 원본 값을 바꾸지 않는 것이 중요 – 1급 객체가 존재한다. * 함수형 프로그래밍에서 함수 = 일급 객체 함수를 변수에 할당하고, 인자로 받고, 반환 값으로 활용하는 것이 가능하다. 일급 객체 : 다른 요소들과 아무런 차별이 없음 * 람다(Lambda)와 고차 함수 (Higher Order Function) : 람다 = 익명 함수 / 고차 함수 = 다른 함수를 인자로 전달받는 함수 (외부의 조작으로 함수의 인자 조작 불가) 고차 함수의 예시 이미지. (.map, .filter, .reduce 등 ..) map으로 아이템을 썰고, reduce로 완성한다. – 참조 투명성이 있다. * 동일한 인자에 대해 항상 동일한 결과를 반환하고 기존 값을 변경되지 않고 유지된다. 함수형 프로그래밍 개념의 순수 함수 : 순수 함수는 오직 입력으로 들어오는 파라미터에만 의존하기 때문에, 함수의 매개 변수로 들어온 값을 직접 변경하는 일을 피하기만 해도 순수 함수를 만들 수 있다. 독립적인 함수이기 때문에 부수 효과가 발생하지 않다. 순수 함수의 조건 1. 같은 입력값이 주어졌을 때, 언제나 같은 결과값을 리턴한다. 2. 사이드 이펙트를 만들지 않는다. OOP와 함수형 프로그래밍의 차이 1. 일급 객체의 차이 함수형 프로그래밍의 일급 객체 = 함수 자체 OOP의 일급 객체 = 클래스, 혹은 객체가 일급 객체 2. 프로그램 함수형 프로그래밍 = 상태값이 없는 함수들의 연속으로 이루어짐 : 값의 연산 & 결과 도출 중심으로 코드 작성이 이루어진다. OOP = 상호작용하는 객체들의 집합 : 클래스 디자인 & 객체 관계 중심으로 코드 작성이 이루어진다. 결론 함수형 프로그래밍은 최대한 줄이기 위해 노력하는 코드이다. 관계를 줄이고, 상태값을 줄이고 최소한의 인풋과 아웃풋을 남겨 순수 함수를 최대한으로 활용한다. 차이를 잘 몰랐었는데 실질적인 개발에는 대부분 객체 지향을 사용했지만 코딩 테스트 문제의 경우 대부분 함수형 프로그래밍을 사용한 것 같았다. 고차 함수를 더 활용해서 효율적인 코드 사용하는 방법을 더 연습해야겠다. 객체 지향과 함수형 프로그래밍을 적절하게 잘 선택하고 조합해 활용할 수 있도록 더 공부해야겠다. 출처 https://poiemaweb.com/js-array-higher-order-function https://itstory1592.tistory.com/120 https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-22-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B3%A0%EC%B0%A8-%ED%95%A8%EC%88%98Higher-Order-Function-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0 https://medium.com/@la.place/higher-order-function-%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-1c61e0bea79

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다