자바 정복 일기 - 함수형 프로그래밍

Bex·2023년 8월 21일
0

자바 정복 일기 By Bex

목록 보기
12/12

1. 함수형 프로그래밍

0) 들어가기 전

(1) 프로그래밍 패러다임(Programming Paradigm)

프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다. 이러한 프로그래밍 패러다임은 다음과 같이 크게 두 가지로 나눌 수 있다.

  1. 명령형 프로그래밍 : 무엇(What)을 할 것인지를 나타내기보다 어떻게(How) 할 건지를 설명하는 방식
    • 절차지향 프로그래밍 : 수행되어야 할 순차적인 처리 과정을 포함하는 방식(C, C++)
    • 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용을 표현(C++, Java, C#)
  2. 선언형 프로그래밍 : 어떻게(How) 할 건인가 보다는 무엇(What)을 할 것인가를 설명하는 방식
    • 함수형 프로그래밍 : 순수 함수를 조합하고 소프트웨어를 만드는 방식(클로저, 하스켈, 리스프)

함수형 프로그래밍은 초창기부터 소프트웨어 개발의 한 흐름이었지만, 오늘날 중요성이 더욱 커짐


1) 함수형 프로그래밍이란

함수형 프로그래밍이란?

  • 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나
  • Robert C.Martin은 함수형 프로그래밍을 대입문이 없는 프로그래밍이라고 정의
  • 대표적인 언어로는 SQL, Scala,Clojure 등이 존재

(1) 함수형 프로그래밍의 특징

  1. 순수 함수(Pure function)
    • 부수 효과가 없는 함수
    • 함수의 실행이 외부에 영향을 끼치지 않는 함수
    • 같은 입력에 있어서 항상 동일한 출력을 가짐

      부수 효과란?

      • 콘솔에 출력하거나 사용자의 입력을 읽는 것
      • 변수를 수정하거나, 객체의 필드를 저장하는 것
      • 예외를 던지거나 오류를 발생시키며 실행을 중단하는 것
      • 파일에 읽고 쓰는 작업
  2. 참조 투명성(Referential transparency)
    • 프로그램의 변경 없이 어떤 표현식을 값으로 대체할 수 있다는 의미
  3. 불변성(Immutable)
    • 함수 외부에서 데이터를 수정하지 않음
    • 함수의 계산을 수행하는 동안 변수에 할당된 값들이 절대로 변하지 않음
  4. 일급 객체(First object)
    - 변수나 자료 구조안에 삽입 가능
    - 파라미터, 리턴 값으로 사용 가능
    - 동적으로 property 할당 가능
    5, 고차 함수(High order function)
    - 함수를 다루는 함수로 함수의 인자 또는 리턴 값으로 함수 사용 가능
  5. 익명 함수(Anonymous function)
    • 이름이 없는 함수
    • 람다식으로 표현되는 함수 구현
  6. 게으른 평가(Lazy evaluation)
    • 코드 실행 즉시 값을 평가하는 것이 아닌 필요한 시점에 평가

(2) 함수형 프로그래밍의 장점

  1. 사용하는 모든 데이터가 변경 불가능하고 부수 효과를 가지지 않기 때문에 동시성과 관련된 문제를 원천적으로 차단
  2. 테스트가 쉽고 가독성이 좋음
  3. 코드 재사용성이 높음
  4. 깔끔하고 유지보수에 용이

(2) 함수형 프로그래밍의 한계

  1. 함수형 프로그래밍의 개념은 이해하기 쉽지 않음
  2. 프로그래밍을 진행하며 수 많은 함수들을 파악하고 유지 관리하기 힘들어짐
  3. 광범위한 환경 설정이 필요할 수 있음
  4. 꾸준한 리팩토링이 필요할 수 있음

참고 자료

[개발상식] 함수형 프로그래밍이란?
함수형 프로그래밍(Functional Programming)이란? 함수형 프로그래밍의 특징과 장점, 한계
[프로그래밍] 함수형 프로그래밍(Functional Programming) 이란?

profile
초보 개발자의 코딩 일기

0개의 댓글