코이팅

[프리온보딩 백엔드 챌린지 Week 1-1] 함수형 프로그래밍이 뭔데요? 본문

대외활동/원티드 프리온보딩 백엔드 챌린지

[프리온보딩 백엔드 챌린지 Week 1-1] 함수형 프로그래밍이 뭔데요?

코이팅 2023. 1. 11. 13:24
728x90
반응형

📝 Week 1-1

함수형 프로그래밍 컨셉 이해하기

🟡 함수형 프로그래밍(Functional Programming)의 등장

 

명령형 프로그래밍을 기반으로 개발했던 개발자들은 개발하는 소프트웨어의 크기가 커짐에 따라 복잡하게 엉켜있는 스파게티 소스를 유지보수 하는 것이 매우 힘들다는 것을 깨닫게 되었습니다. 이를 해결하기 위해 함수형 프로그래밍이라는 프로그램이 패러다임에 관심을 갖게 되었습니다. 

 

🟡 함수형 프로그래밍이란?

함수형 프로그래밍이란 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하여

가독성을 높이고, 유지보수를 용이하게 해줍니다. 

 

함수형 프로그래밍 언어로 설계된 클로저,스칼라,하스켈 등의 언어가 있고, 자바스크립트,코틀린,파이썬 등에도 최근 버전에 함수형 프로그래밍 문법이 추가 되었습니다.

 

🟡 함수형 프로그래밍의 특징?

순수함수(Pure function)
  • 부수 효과가 없는 함수
  • 함수의 실행이 외부에 영향을 끼치지 않는 함수
  • 같은 입력에 있어서 항상 동일한 출력을 냄
참조 투명성(Referential transparency)
  • 프로그램의 변경 없이 어떤 표현식을 값으로 대체할 수 있다는 의미
불변성 (Immutable)
  • 함수 외부에서 데이터를 수정하지 않음
  • 함수의 계산을 수행하는 동안 변수에 할당된 값을이 절대로 변하지 않음
일급 객체(First object, First class citizen)
  • 1급 합수라고도 함
  • 변수나 자료 구조안에 삽입 가능
  • 파라미터로 전달 가능
  • 동적으로 property 할당 가능
  • 리턴 값으로 사용 가능
고차함수(High order function)
  • 함수를 다루는 함수
  • 함수의 인자로 함수 전달 가능
  • 함수의 리턴 값으로 함수 사용 가능
익명함수(Anonymous function)
  • 이름이 없는 함수
  • 람다식으로 표현되는 함수 구현
게으른 평가(Lazy evaluation)
  • 코드 실행 즉시 값을 평가하는 것이 아닌 필요한 시점에 평가

 

고차 함수(map, filter, reduce)

🟡 Map

map 함수는 데이터를 변형하고자 할 때 사용합니다. 기존 데이터를 변형하여 새로운 컨테이너를 만드는데, 기존 데이터는 변형되지 않는다는 특징이 있습니다. map은 컨테이너 내의 모든 요소에 한 번씩 접근해서 함수를 수행한다는 점에서 'for-in'문과 비슷합니다. 하지만 map은 코드의 간결성, 재사용 용이, 컴파일러 최적화 성능이 좋다는 부부분에서 for-in문과 차이가 있습니다. 멀티 스레드 환경에서 컨테이너 값이 한 스레드에서 변경이 되고, 다른 스레드에서도 동시에 값이 변경되려고 할 때 예상하지 못한 결과가 발생하는 것을 방지할 수 있습니다.

 

🟡 filter

filter 함수는 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출합니다. 즉, 컨테이너의 모든 요소를 돌면서 filter의 body 조건을 만족하는 요소들만 담은 컨테이너를 반환합니다.

 

🟡 reduce

reduce 함수는 컨테이너 내부의 콘텐츠를 하나로 통합합니다. 즉, 컨테이너 내의 모든 요소들을 돌면서 모든 요소들의 결합된 값을 리턴합니다.

 

객체 지향 프로그래밍 ( Object Oriented Programing , OOP)이란?

https://king-ja.tistory.com/41

 

객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란?

객체 지향 프로그래밍(OOP) 오늘날 많은 유명한 프로그래밍 언어(Java, C++, C#, Python, PHP, Ruby, Object-C)는 객체지향 프로그래밍을 지원합니다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목

king-ja.tistory.com

☝🏻 위의 링크를 클릭해서 객체지향 프로그래밍에 대해 공부해보세요!

 

객체지향프로그래밍은 이전에 자바를 공부하면서 정리한 내용이므로 링크로 대체하고 생략하겠습니다. 

728x90
반응형
Comments