[개념] 함수형 프로그래밍

2018. 6. 27. 15:54·개발자

함수형 언어

함수형 언어는 함수형 프로그래밍의 패러다임을 따르는 프로그래밍 언어입니다. LISP, Clojure, Erlang 등이 있고, 최근에는 함수형 언어가 아닌 C#, Java같은 객체지향언어에서도 람다 함수의 도입을 통해 함수형 프로그래밍을 지원할 수 있도록 노력하고 있습니다.


함수형 프로그래밍

함수형 프로그래밍은 프로그래밍 패러다임의 하나로 자료 처리를 수학적 함수의 계산으로 취급하고 상태 변화와 가변 데이터를 피하는 것입니다.

순수 함수와 보조 함수의 조합을 이용해서 로직 내에 존재하는 조건문과 반복문을 제거하여 복잡성을 없애고, 변수의 사용을 억제하여 상태 변경을 피하고자 하는 패러다임입니다. 조건문과 반복문은 로직의 흐름을 이해하기 어렵게 하여 가독성을 해치고, 변수의 값은 누군가에 의해 언제든지 변경 될 수 있어 오류 발생의 근본적인 원인이 될 수 있기 대문입니다.

함수형 프로그래밍은 함수형 언어가 제공하는 다음의 특징을 이용합니다.


순수 함수(pure function)

함수의 실행이 외부에 영향을 끼치지 않는 함수입니다. 외부에 영향을 미치지 않기 때문에 스레드-세이프하고, 병렬 계산이 가능합니다.

다음의 add 함수는 외부 변수에 영향을 주지 않기 때문에 스레드-세이프하고, 병렬로 처리 되어도 외부에 영향을 주지 않습니다.

public int add(int a, int b) {
  return a + b;
}

익명 함수(anonymous function)

전통적인 명령형 언어는 함수에 이름이 있어야 합니다. 함수형 언어는 선언부가 없는 익명 함수를 생성하여 코드 길이를 줄이고, 프로그래밍 로직에 집중할 수 있습니다.

다음과 같이 reduce 함수의 입력값으로 익명 함수를 제공하여 값을 처리할 수 있습니다.

Arrays.asList(1,2,3).stream().reduce((a,b)-> a-b).get(); 

고차함수(higher-order function)

함수를 인수로 취하는 함수입니다. 함수를 입력 파라미터나 출력 값으로 처리할 수 있습니다.

Collections.sort(new ArrayList<Integer>(), (x, y) -> x >= y ? -1 : 1);


반응형
저작자표시 비영리 (새창열림)

'개발자' 카테고리의 다른 글

[스크랩] 좋은 자바 개발자가 되는 10가지 방법  (0) 2019.04.12
[이직][스크랩] 이직일기 - 파이썬 면접질문  (0) 2018.04.18
[개발] 유용한 마크다운(Markdown) 에디터 소개  (0) 2018.04.18
[네트워크] 외부 공인 아이피 확인  (0) 2016.12.13
[윈도우] windows modules installer walker 가 점유율을 높이 차지할 때  (0) 2016.11.19
'개발자' 카테고리의 다른 글
  • [스크랩] 좋은 자바 개발자가 되는 10가지 방법
  • [이직][스크랩] 이직일기 - 파이썬 면접질문
  • [개발] 유용한 마크다운(Markdown) 에디터 소개
  • [네트워크] 외부 공인 아이피 확인
hs_seo
hs_seo
Hello World!
    반응형
  • hs_seo
    개발자로 살아남기
    hs_seo
  • 전체
    오늘
    어제
    • 전체 (1140)
      • 개발자 (21)
        • 개발에 유의할 점 (0)
        • 면접 (5)
      • IT 소식 (5)
        • 업계 (1)
      • java (51)
        • 디자인패턴 (3)
        • apache-common (1)
      • 개념 (47)
        • 자료구조 (4)
        • 함수형사고 (8)
        • 디자인패턴 (1)
      • 데이터분석 (1)
      • python (67)
        • 코드조각 (12)
        • 라이브러리 (2)
      • 빅데이터 (418)
        • zookeeper (5)
        • hadoop (78)
        • hdfs (12)
        • hive (127)
        • hbase (16)
        • spark (40)
        • scala (4)
        • trino (3)
        • oozie (41)
        • Hue (9)
        • R (5)
        • sqoop (6)
        • flume (3)
        • elasticsearch (2)
        • airflow (16)
        • kafka (3)
        • kubernetes (10)
        • openstack (3)
        • flink (2)
        • redis (2)
      • 빅데이터 강좌 (2)
      • 알고리즘 (131)
        • 알고리즘 (1)
        • 백준 (61)
        • 정올 (41)
        • 더블릿 (5)
        • 프로그래머스 (1)
      • 프로그래밍 언어 (30)
        • go (4)
        • js (9)
        • .Net (6)
        • Jsp (1)
        • ansible (3)
        • terraform (6)
      • Tools (56)
        • docker (2)
        • macbook (6)
        • maven (3)
        • sublime (1)
      • 프레임워크 (25)
        • [JS] angularjs (2)
        • [JS] node.js (19)
        • [Java] spring (2)
        • Android (2)
      • 데이타베이스 (43)
        • SQLD (5)
        • Oracle (1)
        • MySQL (8)
        • ADsP (2)
      • 리눅스 (25)
        • Bash (61)
      • GCP (5)
      • AWS (34)
        • EC2 (2)
        • EMR (14)
      • 정보보안기사 (4)
        • 네트워크 (1)
      • 개인 (80)
        • 업무실수 (0)
        • 책 (9)
        • 교육 (3)
        • 여행 (17)
        • 영화 (12)
        • 음악 (2)
        • 피규어 (4)
        • 게임 (3)
        • 생각 (7)
        • 기타 (10)
        • 좋은글 (5)
        • 좋은 사이트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 빅데이터-하둡,하이브로 시작하기
    • 빅데이터-스칼라, 스파크로 시작하기
    • Kaggle에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

    백준
    bash
    build
    Hadoop
    파이썬
    java
    mysql
    hbase
    하이브
    Linux
    nodejs
    알고리즘
    오류
    oozie
    SPARK
    ubuntu
    Python
    yarn
    Tez
    S3
    정올
    HDFS
    emr
    airflow
    하둡
    다이나믹
    HIVE
    k8s
    AWS
    error
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
[개념] 함수형 프로그래밍
상단으로

티스토리툴바