본문으로 바로가기

.

함수형 프로그래밍이 주목받는 배경과 장점에 대해서 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/)

저작자 표시 비영리 변경 금지
신고

댓글을 달아 주세요

티스토리 툴바