[함수형 사고] 3장 양도하라

2019. 3. 8. 11:14·개념/함수형사고

컴퓨터의 성능이 향상되고 런타임의 처리 성능이 향상됨에 따라 개발자는 가비지 콜렉션 같은 저수준의 세부사항 조작을 더 이상 신경쓰지 않고, 고수준의 처리 로직만 고민하면 되게 되었습니다. 함수형 언어에서 이를 지원하는 네가지 방식을 살펴 보겠습니다. 

반복처리에서 고계함수로(명령형에서 서술형으로)

for문을 이용한 반복 처리 대신 map과 같은 함수를 이용하여 반복 처리의 제어를 런타임에 넘길 수 있습니다. 고계함수로 반복 처리할 연산이 무엇인지 알려주면 런타임이 효율적으로 이를 처리하여 줍니다. 병렬처리를 원한다면 par, parallelstream을 이용하면 스레드 관리를 신경쓰지 않아도 처리해줍니다.


멀티스레드 관리는 코드를 짜기도 어렵고 디버그 하기도 어려워서 오류가 많이 발생합니다. 하지만 함수형 언어에서는 구문을 하나만 추가하면 런타임이 알아서 관리 해줍니다.


그렇다고 개발자가 저수준 추상 단계에서 코드가 어떻게 동작하는지 이해하지 않아도 되는 것은 아닙니다. 코드의 동작 방식을 이해하면 더 효율적으로 구성할 수 있습니다. 작업의 세부사항은 런타임에 맡기지만 동작방식에 대해서는 이해하고 있어야 합니다. 

클로저

클로저는 지연 실행의 좋은 예이다. 클로저 블록에 코드를 바인딩함으로써 그 블록의 실행을 나중으로 연기할 수 있다. 


명령형 언어는 상태로 프로그래밍 모델을 만든다. 그 좋은 예가 매개변수를 주고받는 것이다. 클로저는 코드와 문맥을 한 구조로 캡슐화해서 행위의 모델을 만들 수 있게 해준다. 이렇게 만들어진 클로저는 마치 전통적인 자료구조처럼 주고받을 수도 있고, 적절한 시간과 장소에 실행할 수도 있다.


스칼라를 이용한 클로저는 다음과 같이 사용합니다. 



커링

커링은 팩토리 함수를 구현할 때나 템플릿 메서드 패턴을 생성할 때, 묵시적인 값을 추가할 때 이용하면 효율적이다. 스칼라를 이용한 커링(currying)은 다음과 같이 사용합니다. 



스트림과 작업 재정렬

명령형에서 함수형 스타일로 바꾸면 런타임이 효율적인 결정을 할 수 있게 됩니다. 다음의 코드에서 filter를 map 보다 먼저 처리하면 전달되는 데이터의 사이즈가 줄어서 좀 더 효율적으로 처리될 것입니다. 함수형 언어의 작업들은 지연 처리를 하여, 작업을 시작하기전에 효율적인 작업 플랜을 구성합니다.


list.map(x -> x.capitalize).filter(_.length > 1).mkString(",")

정리

이상의 방법들로 함수형 언어는 작업시간의 최적화가 가능합니다. 이를 통해 런타임에 처리 가능한 것들은 런타임에 양도하여 저수준의 세부사항은 버리고 문제를 처리하기 위한 프로세스 구현에 집중할 수 있습니다.


스칼라 클로저 참고: 바로가기

스칼라 커링 참고: 바로가기

빅데이터를 위한 스칼라 커링, 클로저 참고하기


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

'개념 > 함수형사고' 카테고리의 다른 글

[함수형 사고] 6장 전진하라  (0) 2019.03.13
[함수형 사고] 5장 진화하라  (0) 2019.03.12
[함수형 사고] 4장 열심히보다는 현명하게  (0) 2019.03.11
[함수형 사고] 2장 전환  (0) 2019.03.05
[함수형 사고] 1장 왜?  (1) 2019.03.04
'개념/함수형사고' 카테고리의 다른 글
  • [함수형 사고] 5장 진화하라
  • [함수형 사고] 4장 열심히보다는 현명하게
  • [함수형 사고] 2장 전환
  • [함수형 사고] 1장 왜?
hs_seo
hs_seo
Hello World!
    반응형
  • hs_seo
    개발자로 살아남기
    hs_seo
  • 전체
    오늘
    어제
    • 전체 (1140) N
      • 개발자 (21)
        • 개발에 유의할 점 (0)
        • 면접 (5)
      • IT 소식 (5)
        • 업계 (1)
      • java (51)
        • 디자인패턴 (3)
        • apache-common (1)
      • 개념 (47)
        • 자료구조 (4)
        • 함수형사고 (8)
        • 디자인패턴 (1)
      • 데이터분석 (1)
      • python (67)
        • 코드조각 (12)
        • 라이브러리 (2)
      • 빅데이터 (418) N
        • 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) N
        • 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에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
[함수형 사고] 3장 양도하라
상단으로

티스토리툴바