[함수형 사고] 6장 전진하라

2019. 3. 13. 13:45·개념/함수형사고

사용하는 언어의 패러다임이 객체지향이러면 문제의 해법을 객체 지향적으로 찾게 됩니다. 하지만 현대의 스칼라같은 언어들은 멀티 패러다임을 지향합니다. 자바도 람다함수를 도입하면서 함수형 언어의 패러다임을 도입하였습니다. 따라서 문제에 적합한 패러다임을 사용하는 방법을 배우는 것이 더 좋은 개발자로 진화하는 길 중의 하나입니다.


함수형 언어의 디자인 패턴

함수형 프로그래밍에서 디자인 패턴은 다음의 세가지로 나타납니다. 첫째, 디자인 패턴은 언어나 런타임에 흡수 될 수 있습니다. 클로져의 ?. 문법이나, 스칼라의 커링과 같은 문법적 설탕이 이 역활을 지원합니다. 둘째, 패턴들은 그 의미를 보존하면서 다른 의미로 구현될 수 있습니다. 플라이웨이트 패턴은 메모이제이션 같은 기능을 이용하여 구현할 수 있습니다. 셋째, 함수형 언어와 런타임은 전적으로 다른 기능을 가질 수 있고, 그것들을 사용하면 같은 문제라도 다른 방식으로 해결할 수 있습니다. 다음은 소수를 구하는 문제를 커플링(상속)과 구성(static 함수 이용)을 이용하여 다르게 해결한 문제의 예입니다.


커플링과 구성을 이용한 코드 재사용예

먼저 명령형으로 자연수 분류와 소수를 찾는 함수를 구현한 예입니다.



커플링을 이용한 코드 재사용

위 클래스를 보면 ClassifierAlpha, PrimeAlpha는 동일한 isFactor(), factors() 메소드를 사용하고 있습니다. 따라서 객체지향에 맞게 코드를 재사용하기 위해서, 이를 슈퍼클래스로 추출하면 커플링을 이용해서 코드를 재사용할 수 있습니다.




구성을 사용한 코드 재사용

다음은 이 클래스를 코드의 재사용을 위해서 함수형 언어처럼 구성을 이용하여 구현해 보겠습니다. 이 클래스는 모두 Factors클래스를 이용하지만, 클래스를 상속하지 않고, of() 메서드만을 이용하고 있습니다.



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

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

[함수형 사고] 8장 폴리글랏과 폴리패러다임  (0) 2019.03.13
[함수형 사고] 7장 실용적 사고  (0) 2019.03.13
[함수형 사고] 5장 진화하라  (0) 2019.03.12
[함수형 사고] 4장 열심히보다는 현명하게  (0) 2019.03.11
[함수형 사고] 3장 양도하라  (0) 2019.03.08
'개념/함수형사고' 카테고리의 다른 글
  • [함수형 사고] 8장 폴리글랏과 폴리패러다임
  • [함수형 사고] 7장 실용적 사고
  • [함수형 사고] 5장 진화하라
  • [함수형 사고] 4장 열심히보다는 현명하게
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에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바