아틴
Atin
아틴
전체 방문자
오늘
어제
  • 분류 전체보기 (460)
    • Devlopment (246)
      • 정리 글 (20)
      • MicroServices (0)
      • Reactive, Concurrenc.. (12)
      • Java (44)
      • Spring (20)
      • C,C++,Ruby,Python (52)
      • Mobile (39)
      • Web (35)
      • Tip & Info (14)
      • Unit Test (7)
    • Infra (44)
      • OS (21)
      • RDBMS (13)
      • NoSQL&Cache (5)
      • AWS (4)
    • Computer Science (11)
    • Etc (156)

블로그 메뉴

  • Home
  • Guestbook

공지사항

인기 글

태그

  • Java
  • CSS
  • TRPG
  • Dungeons & Dragons
  • 던젼 앤 드래곤즈
  • Android
  • 여행
  • 안드로이드
  • C
  • 전라도
  • 자바
  • javascript
  • 아이폰
  • mysql
  • 해킨토시
  • jsp
  • Ruby on Rails
  • 정읍
  • Python
  • Linux

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
아틴

Atin

Devlopment/정리 글

함수형 프로그래밍이 주목받는 이유

2016. 4. 27. 12:13
반응형

.

함수형 프로그래밍이 주목받는 배경과 장점에 대해서 Refreence [1][2]를 참조해서 요약을 해보았습니다.



배경

무어의 법칙이 깨지고 멀티코어 CPU의 등장

* 컴퓨터에서 사용하는 반도체 회로 성능은 대략 18개월마다 2배로 빨라진다는 법칙

* 2000년대 중반부터 법칙이 깨짐

* 물리적인 한계에 부딪힌 CPU 회사들은 여러 개의 칩이 병렬적으로 동작을 하도록 만드는 수평적 전략을 채택


프로그래밍 환경의 변화

* 단일코어 환경 : “멀티쓰레딩” 코드는 여러 개의 쓰레드가 하나의 CPU를 가장 효율적인 방식으로 공유하도록 만드는데 초점을 기울임

* 멀티코어 환경 : “멀티쓰레드” 코드는 이제 어플리케이션이 동작하는 동안 놀고 있는 CPU가 없도록 만드는데 초점을 기울임


동시성 코드 작성의 어려움

* 브라이언 괴츠의 Java Concurrency in Practice

* 현대의 프로그래머들에게 동시성 코드를 작성하는 것이 왜 어려운지, 어느 정도로 어려운지, 알려줌

* 잠금(lock), 세마포(semaphore) 같은 동시성 프로그래밍의 어셈블리 언어를 사용하는 상황을 피해야 하는지 잘 보여주었다.


명령형(imperative), 객체 지향적 언어에서 동시성 코드 작성이 어려운 이유

* 객체 상태나 데이터 값이 기본적으로 변경 가능(mutable)

* 여러 쓰레드에서 공유하는 데이터가 변경 가능하다는 점




함수형 프로그래밍

* 모든 데이터가 기본적으로 변수가 아니라 상수

* 값이 변경 불가능(immutable)

* 값이 변경되지 않는 상수는 많은 쓰레드가 동시에 접근하더라도 동시성과 관련된 문제를 야기하지 않음

* 잠금(lock)을 통해서 보호될 필요도 없고, CPU의 레지스터에 저장되는 캐시 값과 관련된 가시성(visibility) 문제를 일으키지도 않음
* 동시성 프로그래밍의 문제를 멀티쓰레딩 구조물을 통해서 해결하는 것이 아닌 구조물의 필요성 자체를 제거하는 방식



"모든 대입문의 사용을 포기해라! 그러면 놀라운 동시성의 세계로 들어갈 수 있다."

 의심할 여지없이, 만약 메모리의 어떤 위치에 맨 처음 한번만 값을 할당하고 프로그램이 실행되는 동안 이 값을 변경하지 않는다면, 131072개의 프로세서들이 서로 먼저 이 메모리 값을 사용하려고 한다 할지라도 우리는 더이상 신경쓸 필요가 없다.

 이전에는 두 개 이상의 프로세스가 동시에 하나의 메모리 값을 변경하는 경우를 방지하기 위해서 세마포어(semaphores)라는 기술을 사용해야만 했지만, 이제는 그럴 필요가 없다. 왜냐하면, 이제는 더 이상 메모리 값이 변경되는 일이 발생하지 않기 때문이다.


- 로버트 마틴[2] -


참조 투명성

* 정의를 가지고 있는 문장의 어디에서나 동일한 단어라면 그 단어를 서로 맞바꾸어 놓아도 그 문장이 가지고 있는 원래 의미가 절대 변하지 않는 것을 의미


코드의 간결함

* 반드시 필요한 논리와 추상을 추려내서 우아하게 표현

* 디자인 패턴 등의 비본질적인 코드를 제외

* 비본직절인 코드 : 하일스버그는 세레모니(ceremony)라고 표현






Reference

[1] 씨넷코리아, 함수형 프로그래밍이 주목 받는 3가지 이유 (http://www.cnet.co.kr/view/6472)

[2] 함수형 프로그래밍(Functional Programming) 기초 (http://kwangshin.pe.kr/blog/2013/01/21/%EB%B2%88%EC%97%AD-%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8Dfunctional-programming-%EA%B8%B0%EC%B4%88/)

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

'Devlopment > 정리 글' 카테고리의 다른 글

AWS re:Invent 2019 12월 2일 키노트 요약  (0) 2019.12.05
Java9 특징  (0) 2016.12.12
DDD와 JPA에 대해서 알아야 하는 이유  (0) 2016.06.24
적정 스레드 수  (0) 2013.05.20
Qt(Qt Development Frameworks)란 무엇인가?  (0) 2012.04.16
정규식 예제  (0) 2012.03.29
Java에서 JNI를 써서 핑 프로그램을 구현하는 이유  (0) 2012.01.30
버전 관리 & 이슈 관리 시스템  (0) 2011.06.07
C와 Java의 컴파일 과정  (1) 2011.05.27
난수 발생기  (2) 2010.06.23
    'Devlopment/정리 글' 카테고리의 다른 글
    • Java9 특징
    • DDD와 JPA에 대해서 알아야 하는 이유
    • 적정 스레드 수
    • Qt(Qt Development Frameworks)란 무엇인가?
    아틴
    아틴

    티스토리툴바