하마
6k
2015-04-03 11:30:17 작성 2017-10-13 08:32:29 수정됨
16
39033

왜 스칼라를 비롯한 잡종/순수 함수형 언어가 메이져가 될수 없는가..


이 글의 조회수가 높아짐에 따라 스칼라에 대한 안좋은 인식이 생길까 우려스러워 한 마디 추가 합니다.

개인적으로는 스칼라 언어  굉장히 좋아합니다. 그래서 제 블로그에는 수많은 스칼라,AKKA,Play 글이 올려져있습니다. 웹개발에 있어서 스칼라기반  play2  가 스프링 보다 즣은 면이 많다고 생각합니다. Reactive 프로그래밍에 적합합니다.Akka 로 마이크로서비스 구현하는것도 편리하구요.그러나 내가 좋다고 대중적 1,2 등 언어가 될 순 없습니다. 10등 20등 언어면 어떻습니까 내가 우리팀이 좋아하면 쓰는거죠. ㅎㅎ

물론 모든 언어 파라다임은 장단이 있으며 함수형 프로그래밍의 단점이 없는것은 아닙니다.

함수형프로그래밍의 단점1  

함수형프로그래밍의 단점2


@ 아래부터 원글입니다.
미리 정리해서 쓴 글이 아니라 어떤 글에 대한 반박 형식의 글을 모음집이라 
정리가 잘 안된 점 양해해주세요. 



" list.map( x => User(x.name, format("Y-m-d", x.regdate) ) ) 로해결합니다. "  - notice 님 글 발췌.


스칼라 그러니깐.. 저런 함수형 표현들이 굉장히 깔끔하긴하죠.

그리고 저런표현이 훨씬 좋다고 많이들  광고합니다. 심취하면 notice 님처럼 과격한  글도 쓰는것이구요. 

라인수가 줄어들었으니.. 유지보수가 편해진다. 길게 늘어쓰지 않고, 함수(이름있는) 로 표현하니깐

이게 무엇인지 명확하게 알려줘서 유지보수가 편해진다. 내부적으로 성능을 높이게되면 공짜점심이 생긴

다 등등.. 엄청 좋긴 합니다. 

근데 하나의 함정은 for 문 대신해서 저런 추상층이 높아진 표현은 그 만큼 오류에 대한 복잡도도 증가합니

다.  뭐 그렇다고 "그럼 c 로 짜거나 어셈블리로 짜면 더 단순해서 좋겠네? " 라고 말하실 수 도 있으나, 

제 생각은 보통 사람들이 받아드리는 최적의 추상단계로 "자바" "파이썬" 정도로 생각합니다.(물론 Java 8

Stream API 도 제외. 그것도 모두가 평범하게 사용되기까지는  10년 있어도 무리라고 봅니다.) 

(저도 함수형 좋아합니다. ^^) 근데 제가 10년넘게 C++ 을 주력언어로 사용하면서 느낀게..  

(C++ 은 10년전부터 함수형 패러다임을 추가하고있음) 

대부분의 개발자들은 혹은 인간은  본능적으로 함수형 패러다임을 어려워합니다. (익숙해지기 오래걸림) 

그냥 for문을 여러줄에 걸쳐서 작성한것을 읽는걸  "함수자"  등을 쓴것보다 더 쉽게 읽는다는 말입니다.

흡사 절차지향적으로 쭈욱 써놓은걸 , 객체지향적 패턴으로 마구 추상화 시켜놓은것보다 

코드리딩이 쉬운것 처럼말이지요.

 ( 객체지향적 코딩이 대중적 인간이 익숙해질수있는 최상점이라고 봄,  SQL 이나 LINQ 등을 양념으로) 


bool is_cool (const Thing& x) { ... }
find_if(begin, end, not1(ptr_fun(is_cool)));


* c++ 은 10년전부터 함수형을 지원했지만..이런 코딩을  일반적으로 실무에서 찾아보기 힘들죠..

  그냥 자기만족 수준. (물론 람다가 최근에 표준이 되어서.. 앞으로는 좀더 많이 쓰이겠지만..) 


내가 notice  님 이전글에서 , 함수형언어가 메이져가 될 가능성은 0%라고 예견했는데...

결국 이유가 단순합니다. 어려워서 입니다.   (단순 Functor 유틸조차 어렵습니다. 포인터,레퍼런스형 따로

있는 바인더,부정자..등등)    좀더 정확히 말하면  C++ 개발자들한테 어려운것을 감수할만큼 강력함을 어

필하는데 실패한거겠지요. (최근 자바8 Stream API 는 성능이라는 공짜점심때문에 더 좋아지긴 했습니다)


아마.. 순수함수형식의 코딩이 어렵지 않게 느껴지는 그룹과  꼭 필요한그룹에서는 사용되겠지요. 

근데 대중적이기는 무리라고 봅니다. 아 클로저는 아예 언급도 안하렴니다.  결국 자바는 쭈욱 갈거라고 생각합니다.(조금씩 차용하며)

(저런 함수형 표현을  쓰지 않더라도 충분함, 오랜기간 크게 사용되지도 않을거라 예견)

(먼가 엄청 강력한걸 어필할수있으면 자연스럽게 , 자바8이 각광받거나 스칼라로 옮겨감)  


대중에게 퍼트리고 싶어하시는 마음 알겠으나 ..그러기 위해서는 그렇게 과격하게 하지말고..

짧게짧게 팁/테크로 올리면.. 대중화까지는 안되더라도 많이들 쓰실겁니다.


( 추가)


혹자는 현재 미국에서는 스칼라가 많이 쓰인다느니..자바,c#,javascript들도 함수형계열 아이디어를

앞다투어 차용하지 않느냐? 다음세대는 함수형 페러다임에 쉽게익숙해질거다.등등

흠흠 얼핏 생각하면 그럴수도있겠습니다만..

근데 함수형패러다임은 아시다시피 요즘 튀어나온거도 아닐뿐더러  최근 스칼라로 코딩하는 데 이상한

우월감을 느끼는 몇몇 수준이하의 사람들처럼 옛날부터 Lisp 등에 자부심을 갖고있는 사람들은

존재했었지요 .근데 lisp / 헤스켈 / 얼랭 은 대증화와는 거리가 멀지요.

최근들어 분산환경이나 멀티코어를 적극적으로 활용해야하는 시대가 되기도 했고 사람이라는게 예전것,

오래된것은 쿨하지 못하다고 생각하는것등이 합쳐지면서 함수형패러다임의 고유의 장점들과

합쳐지면서 각광을 받습니다만..15 년전에 lisp을 처음봤을때부터 느낀게 함수형은 이질적이다라는거죠. 일단 재귀를 생활화한다는것 자체부터 대중과는 거리가 있습니다.

보통어렵다는 C++ 가 훨씬 코드리딩하는데 쉽게 다가왔었습니다.

자바는 더 정제되서 깔끔하구요.  제가  머리가 안좋아서 그럴수도있겠지만 해커와 화가 쓴 그 분

(폴그레이엄) 수준의 개발자가 기준이 될수가 없잖습니까. 고로 여러언어에서 함수형언어의

아이디어는 가져오겠지만 그리고 스칼라를 예로들면  기존에 C++ 의 boost split 보다 훨씬 파서구현에

용이하기때문에 특화되서 사용된다든지, akka  를 사용하는 병렬분산솔 루션이라든지 사용처는

충분히 존재 하겠지만  (물론 여러 대형싸이트에서도 사용중) 그런식의 코드가 대중화되거나

 (c++ 에서 단지 함수자,함수형 헬퍼 들조차 10년지난 아직까지 대중화 되지 않은 사례,템플릿메타프로그

래밍은 말할것도없고) 함수형언어가 객체지향언어를 제치고 메이져가 될꺼라는 생각은 아직 안듭니다.

한 10~20 년후에 어찌될지 굉장히 기대됩니다.  (추가: 10년후에도 여전히 C,C++, 자바, 파이썬, 자바스크립트가 대중언어일거라 예측합니다. Swift  가 강력히 올라갈것이고 그 뒷자리를 스칼라, Go 가 차지) 


(상세 추가 2 : 다른곳에 쓴 댓글을 가져옴) 


스칼라를 쓰면서 단지 제공되는 functor util 쓰는것에 대한 이득만으로 스칼라를 사용하는건 낭비라고

보구요. 말씀대로 강제하진 않지요. 잡종인 이유가 그런회유책이니깐요. (C++ 처럼) 자바도 대략

다 지원하는데 굳이..

결국 C++ 을 제대로 쓰려면 자바등을 공부해야 하는 or  하면 좋은것처럼 스칼라도 제대로 쓰려면

그 실제 철학을 잘알아야 하는데 아시다시피 스칼라는 이름이 나타내는것처럼 추상을 극대화하는것을

쉽게 해주며  언어를 사용하는 사람이 언어내에서 다른언어를 만들수있을 만큼 자유도를 높여주고자하는

철학을 가지고 태어났으며  그것을 이해하고 사용하려면 소위  함수형프로그램의 특성인  상태불변성,일

차/고계함수,클로저, 모나드등 뿐만 아니라 트레잇,  타입을 요리할수있는 능력이 필요하다고 할수있습니다.

일단 저런것에 대한 helloworld 로 간단한  파서를 만들어보는게 가장 빠르겠지요..

굉장히 간결해보이긴 합니다만..

이 모든것들이 많은 대중적인 소프트웨어에서 필요로 하는것 이상인거 같습니다.

 제 짧은 시야로는 저런 자유도가 오히려 부담감으로 다가오면서 객체지향언어와 그 동안 해온

 동적언어만(필요한것은 LINQ  처럼 언어안에 포함및 라이브러리 제공)으로 계속가자 라는 분위기속에  

 점유율은 크게 변동이 없을것이며 더 간단하면서 강력한 이상향의 무기를 기다리며 시대가 흘러가리라

 봅니다.



ps.

유망언어들 중 클래스가 없는 언어들이 있죠.클로저,golang  말입니다. 이 언어들은 클래스의 무용과 그 자체가 가진 복잡함을 단점으로 대비시켜 자기 언어를 광고 하기도 합니다.  맞는 부분도 있지만 대중화에 있어서는 틀렸다고 봅니다. 인간이란 사회적 동물입니다. 어떤것들의 집합,연관성,소속,계층에 대해 인식하는것을 애초부터 자연스럽게 느껴왔죠. 클래스가 그런겁니다. 사람들은 뭔가가 하나에 뭉쳐있다는것 만으로 큰 안정감을 얻게 됩니다. C++ 자바가 대규모 프로젝트에서 계속 사용되는 증거라고 봅니다. 저는 이 안정성에 주목 하였으며 이 특장점 때문에 클래스기반 객체지향언어는 계속 대중성에 있어서 최상위에 위치 할 것입니다.






하마 블로그 가기

4
3
  • 댓글 16

  • fender
    16k
    2015-04-03 11:58:51

    함수형 언어를 본격적으로 사용하기 위한 진입 장벽이 있다는 점은 동의하지만 그렇더라도 이 것이 스칼라 같은 언어의 확산을 막는 장벽이 되진 않을 것이라고 봅니다.

    특히 스칼라와 같은 멀티 패러다임 언어의 경우 필요한 경우 필요한 만큼 함수형의 특성을 활용할 수 있고, 하다못해 map과 같은 몇몇 기초적인 개념만 배운다 하더라도 정말 많은 부분에서 훨씬 간결한 코드를 짤 수 있습니다.

    개인적으로 순수 함수형 언어가 대중화 되지 못하는 이유는 난이도 보다는 함수형 패러다임이 객체 지향에 대한 완전한 대체제라는 관점이 보편적 공감을 얻지 못하기 때문이라고 생각합니다.

    이 부분에 대해선 저 역시 객체지향에 익숙한 만큼 순수 함수형 언어를 많이 다뤄보지 못했기 때문에 말을 아끼고 싶습니다만, 적어도 멀티 패러다임이라는 측면에서 스칼라의 경우 이 문제에 대해선 다른 함수형 언어에 비해선 유리한 위치에 있는 건 사실인 것 같습니다.

    개인적으로 스칼라의 진입 장벽이 있다면 함수형 언어의 특성보다는 매우 복잡한 타입 시스템을 들고 싶습니다. 특히 암묵적 변환과 결합하면 강력하긴 하지만 난이도가 급격히 증가해서 이 부분이 다수 개발자들에게 진입 장벽이 될 수 있을 듯 합니다.

    요즘 몇 일 특정 글 때문에 너무 스칼라 언어에 대한 반감과 오해만 커진 것 같아서 기분이 좀 그렇더군요.

    특별히 바쁘지만 않으면 저라도 간단한 소개글을 써서 좀 인식을 바꿔보고 싶은데 요즘 특히 바빠서 시간이 날지 모르겠습니다...

    0
  • 칸나
    1k
    2015-04-03 12:28:27
    별로 어렵지 않은데...익숙하지 않응것이라고 생각합니다. 익숙해지면 굉장히 간결해지고 우아한 코드에 흐뭇~ 할때가 많습니다
    0
  • kenu
    47k
    2015-04-03 12:38:32

    국내 개발자들의 언어는 사장님이 수주해오는 프로젝트에 많이 좌우됩니다.

    전자정부 표준프레임워크 에반젤리스트를 하고 있지만, 여기서 논의되는 얘기를 많이 참고하겠습니다.

    취업을 위해서는 자바를 해라. 아직은 유효한 말입니다.
    족보 외워서 자격증 시험따는 분위기의 사회에서 절대적으로 맞는 말이기도 합니다.

    하지만, 그렇게 살면 재미없는 프로그래머의 삶이라고 얘기하고 싶습니다.


    http://www.json.org 아마도 새로운 언어가 나올 때마다 하단의 json 파서 목록에 추가될 것입니다.
    왜 그 언어를 배워야 하는지 생각하고 배우면 좋겠습니다.

    패션인지, 생계인지, 레밍인지...

    0
  • 쥬드노
    827
    2015-04-03 13:02:29
    저는 그래서 요즘 클로저 다루고 있습니다.
    0
  • 요키
    83
    2015-04-03 13:49:04

    개인적으로 이쁜(?) 코드보다 가독성 좋고 읽기 좋은 코드를 좋아합니다.

    특히 팀작업에서는.

    (아... 함수형 언어가 가독성이 나쁘다는 이야기는 아닙니다. 그냥 위에서 이쁜코드란 말이 나오길래..요 ㅋㅋ)

    0
  • TrustMe
    208
    2015-04-03 16:04:48

    이글도 밑에 있는 글과 수준이 비슷해보입니다

    개인적으로 함수형과 객체지향의 논쟁은 단순히 표현력이 좋다 생산성이 좋다라는 식으로는 결론이 날 수 없다고 생각합니다. 물론 저는 함수형을 사용하는 입장에선 함수형이 훨씬 생산성이 좋다고 봅니다, 단지 SI형식으로 단기프로젝트 형식이 아닌 장기적으로 서비스를 개선하고 발전시켜야 하는 입장에서입니다 저는 Apache Spark 빅데이터 솔루션을 만들고 있는 스칼라 개발자입니다. 함수형과 객체지향 패러다임의 큰 차이점중에 하나가 바로 State라는 것인데 Java의 객체들은 상태를 가지고 서로 관계가 얽혀있어서 이것이 서버 20대에 분산시켜서 돌아가게 되서 에러가 나타나면 버그를 트랙킹하기가 매우 어려워 집니다. 

    노드1에서 이 객체의 상태를 5로 변경하고 그다음에 노드2에서 객체의 상태를 3으로 변경하고 또한 이 순서가 뒤바뀌기도 하는 Race Condition문제가 발생하기도 하고 그로인해 모니터링툴을 돌리면서 쓰레드를 해들링해줘야하는 추가작업이 있는 반면에

    Scala의 가장큰 장점은 Concurrency입니다. Stateless하게 코드를짜기 때문에 Race Condition이 크게 중요하지 않습니다 그냥 별로 부담없이 동시에 실행시켜도 아무 문제 없습니다. 멀티서버환경에서 자바로 개발하기 때문에 신경써야 할부분들이 Scala에서는 다 없애버리고 내가 생각했던 비즈니스로직과 아키텍쳐에만 집중할 수 있어서 참 편합니다

    이 커뮤니티의 누군가가 언어는 그냥 도구라고 말했듯이 언어와 자신의 자아를 동일시 하지 않았으면 좋겠습니다.

    0
  • TrustMe
    208
    2015-04-03 16:09:50

    함수형 언어가 메이저가 될수없다는것에는 동감하기 어렵군요, 한국은 모르겠지만 미국쪽에선 신규개발은 스칼라로 많이 갈아타는 분위기 입니다. 또한 애플도 이미 Objective-C를 버리고 새로운 함수형언어인 Swift를 출시한 상태고 자바도 뒤늦게 함수형 흉내라도 내보려고 업데이트를 하고 있지만 오픈소스인 스칼라 보다는 발전속도가 확실히 느립니다.

    함수형이 인기를 타고있는 이순간에 함수형은 메이저가 되기 어렵다? 하지만 함수형을 첫번째 언어로 사용하게될 다음세대 프로그래머들은 객체지향을 어떻게 느낄지 궁금하군요

    (하지만 저도 JDK 8버전의 JVM성능향상과 순수한 함수지원 등에 대해선 기대를 많이 하고 있습니다, 오라클님들 힘내세요)

    0
  • 하마
    6k
    2015-04-03 16:22:36
    TrustMe 


    님은 논점이탈을 하셨네요. 

    본문은 객체지향 vs 함수형 패러다임에 대한 대중화에 대해서 쓴 글입니다.

    누가 더 좋고 나쁘다를 말하는글이 아니구요. 더군다나 Concurrency &

    객체지향패러다임의 state 에 대한 위험성을 논하는 글도 아닙니다. 

    님은 수준  논 하실만한분은 아니신거 같구요.

    Concurrency 때문에 scala 가 좋다라는 초딩스러운 시각으로 말한다면 

    이해하기 힘들정도의 Concurrency 복잡도가 생기는 프로젝트의 현재 비율이 얼마나 되?

    그럼 더 완벽한 클로저를 쓰지 그래?  akka 가 스칼라만 사용가능하냐? 

    혹은 니가 자바랑 C++ 에서 병렬프로그래밍을 못하니깐 그런거야. 

    C/C++ 은  actor 같은 걸 제공해주는 표준 라이브러리도 없는데 왜 대중적일까..?

    락에 대한 개념도 없고 관리도 못할 주제에  분산솔루션개발한다는거야 ?

    이렇게 같은 수준으로 대응하면  끝 아닐까요? ㅎㅎ


    p.s

    이런 저런 이유에서 자바보다 결국 더 대중화될꺼다. 이렇게  쓰세요.  



    0
  • TrustMe
    208
    2015-04-03 16:24:53

    그래요 서로 다른말하고 있으니 닥치고 끝냅시다.

    스칼라 써본적도 없는사람이 감히 아는척 하는글인것 같아서 저도 좀 감정적이었어요 경험이 있는지나 궁금하네요

    어차피 넷상이니까 해봤다고 말하겠지만 그럼 이만.

    0
  • 지붕뚫고높이차
    740
    2015-04-03 22:14:19

    TrustMe 님.

    멀티서버 환경에서
    Race Condition 부담이 없고
    Concurrency 장점이 있는
    Scala 코드를 보고 싶습니다.

    20대는 아니더라도
    2대의 멀티서버 환경에서 구현된
    간단한 샘플을 보여줄 수 있으신가요?

    Scala 가 Vector 하고 관련있다고 생각하는
    무식한 자바 개발자가 물어봅니다.

    0
  • boojongmin
    681
    2015-04-07 16:00:42

    actor랑 스칼라쪽에 관심갖고 공부중인 1인으로
    신텍스정도는 학습하고 이래저래 사용해봤는데
    내가 왜 이짓을하지?라는 생각을 못지우겠네요(일단 에러 팡팡 터질때 구글님 잘 안알려주셔..)

    기술의 leader보다는 fast follow라도 제대로하라고 조언해주신 선배님의 말이 
    제대로 와 닿았죠(제가 몸으로 고생해야 머리로 깨우치는 스타일이라;;;)

    아직은 익숙한 자바나 더 공부할려고요

    랭귀지 늘리는것도 좋지만
    자바만하는게 지겨워서 개인적으로 python, nodejs, 스칼라 학습했었는데

    랭귀지 자체보다 관련 툴들(빌드, 라이브러리관리, 기타등등) 새로 적응하고
    새로운 익셉션들에 익숙해지는게 일이더군요

    자바 오래하다보니 짬밥으로 훅훅 헤쳐나가지만
    사용인구가 적다보니 스택오버플로우에서 찾는건 쉽지 않고

    특히 영어가 안되다보니 
    튜토리얼, 메뉴얼 보다가 화딱지나고 관련 소스코드 찾느라 github example 검색질이나하고

    그러다보니 요 근래는
    이론적인 단위테스트말고 실제로는? 스프링 4.X 사용법은?
    spring boot, spring data, spring security, jpa 이참에 인텔리제이도 함 사용해봐?
    (springdata, jpa, jsr-303 진짜 좋더군요)
    메이븐 공부했더니 그래들이 뜨네? (아놔 그래들할라면 그루비도 알아야돼?)

    지금도 공부할게 산더미더라구요
    글 작성하신 분 내공을 보니 제가 겪는 과정은 지나신 내공이 더 뛰어난 선배님이신거 같은데
    저같이 영어안되는 초중급 왔다리갔다리하는 내공으로는 학습이 쉽지는 않더라고요
    더 내공을 쌓아야... 쿨럭...;;



    스칼라 좋아 멀티 패러다임이고 람다 짱
    jvm위에서 돌아서 자바 라이브러리도 고대로 쓸수 있어
    jvm 자체가 나온 역사만큼 퍼포먼스와 안정성도 덤으로 가져오고
    actor 모델을 지원해주는데 그걸 구현한 akka 라이브러리는
    멀티코어 분산환경에서 짱임 (akka는 자바도 있으니.. 흠...)

    이래 생각해서

    회사에서 C#으로 만든
    크롤러를 scala akka로 변경할려고했는데요
    막상 수많은 삽질을 겪고 보니 쉽진 않네요 -_-;;
    내가 이거밖에 안됐나싶은 자괴감도 생기구요..

    심적 내상만 잔뜩 쌓여서

    일단 gg 쳤는데

    나중에 사용자가 늘고 스택오버플로어에 내용도 많이 쌓이면
    (근데 생각해보면 좀 깊숙한 부분의 질문같은건 스택 오버플로어에도 별로 없는듯요...)

    그때 시작해도 늦지 않을거 같다란 생각이 들어서 현재는 자바만 집중적으로 파기로.... -_-;;;

    예전 글 작성 내용이 국어 배울때 나온 용어가 떠오르네요
    '의식의 흐름 기법'
    걍 생각나는데로 주저리주저리...;;

    그래도 이런글&토론


    요러면서 보고 있음돠 감사요 ㅎㅎ

    0
  • 구르마
    315
    2015-12-26 14:36:19

    저도 C/C++ 10 년 넘게 했습니다. 멀티스레딩 프로그래밍도 많이 해봤구요. (글쎄요. 어느 정도가 많다는 것인지는...--a) 자바도 한 3년 정도 한 것 같네요. 안드로이드하면서요.

    현재는 클로저로만 프로그래밍합니다. ^^;;;

    전에 클로저로 게임 서버 만들었는데, 여차저차해서... 이 게임 소스를 팔게 되었는데, 그쪽에서 자바로 다시 짜달고 해서 다시 자바로 짠 적이 있습니다. ㅜㅜ;;;;;

    자바로 짜면서... 뭐, CRC 카드 기법을 적용해서 설계는 깔끔하게 나왔는데... 스레드에서 쥐약이더군요... 클로저로 만들 때는 전혀 고려하지 않았던 거였는데...ㅜㅜ;;;

    결국, 서버의 안정성을 위해 엄청난 테스트를... 가상 클라이언트를 1000개, 2000개, 3000개 씩 만들어서 서버에 접속하고... 스트레스 테스트 진행... 

    제 기억으로는 전체 기간중 30-40%가 이런 테스트 작성하느라... ㅜㅜ;;;


    제가 클로저를 제 메인 언어로 택한 이유가 여러가지가 있지만 그중 하나는 단순성(Simplicity)입니다.

    저는 프로그래밍이란 결국 복잡성과의 싸움이라고 생각합니다.

    복잡성과 싸워 이길 수만 있다면 함수형이든, 객체지향이든, 심지어 절차형이든... 상관없습니다. 그게 어떤 언어이든 상관없습니다. 언어는 그 자체로는 프로그래밍을 위한 하나의 도구에 불과한 것일 뿐이죠.


    어렵다/쉽다... 글쎄요...이건 뭐 익숙함의 차이가 아닐런지... (C에서 C++로 넘어갈 때도 객체지향이라는 개념은 또 얼마나 어려웠던가요...1990년대 쯤 마이크로소프트웨어 잡지를 보시면...OOP에 대한 기사를 많이 보실 수...)

    함수형 프로그래밍이 어렵다라... 글쎄요... 저는 객체지향에 비해 그렇게 어렵다는 생각은 아닙니다. 이건 뭐... 저의 주관적인 생각인지 모르겠습니다만...--a, 오히려 어느 정도 익숙해지면 더 쉽다고 생각해요... 왜냐면 그만큼 복잡성이 제거되기 때문이죠. 


    복잡성...


    단적으로 예를 들어... C/C++의 포인터의 경우...이게 복잡성의 근원이죠... 자바에서는 없죠... 이게 C/C++이 자바보다 어려운 이유중 하나입니다. 포인터는 메모리를 직접 다뤄야 할 필요가 있는 분야에서는 반드시 필요한 것이겠죠. 하지만 그렇지 않은 분야에서는 복잡성의 근원으로서 온갖 버그의 온상이 됩니다.

    (한때는 저도 포인터없는 언어는 진지한 의미에서 언어가 아니라고 생각했던... 자바같은 언어를 폄훼했던...이런 ...쿨럭~...그러다 자바 써보니 넘 좋더군요...아... 소멸자를 않쓰는게 얼마나 편한지...)


    스레드도 마찬가지입니다. 세마포어, 뮤텍스, 크리티컬 섹션... 에또 뭐가 있더라....쩝... 뭐 이런 것들로 스레드를 집접 통제하는 것은 그리 좋은 방식은 아닙니다. 이보다 훨씬 좋은, 수학적으로 입증된, 동시성을 처리할 수 있는 단순(simple)한 CSP라는 것이 있죠. 이것은 세마포어를 만든 다익스트라(Dijkstra)가 인정한 거고요. 최근에 Go언어에 고루틴/채널의 형태로 도입되었고, 클로저에서는 core.async라는 형태로...

    (CSP 뭐... 이거 공부해야 씁니다만... 스레드 직접 만들어서 세마포어, 뮤텍스, 크리티컬 섹션 등 공부하는 거에 비하면...)


    그리고 또... 복잡성의 근원으로는... 멀티 패러다임... 타입...ORM...상속...아아아... 여기까지...할께요..


    함수형이냐 객체지향이냐... 뭐... 이런거 보다는 복잡성에서 단순성으로 가는 것... 뭐... 이게 중요하지 싶네요...^^;


    일단 뭐 이건...저의 생각일 뿐이고요... 다양한 업무 분야에서 사용하시는, 하실 수 밖에 없는 그런 것도 물론 고려해야 겠죠. 실제 작업하시는 업무 환경에 맞게 선택하는 것이 맞는 거지요. ^^;


    아 그리고...

    @하마 님...15년 전에 LISP을 해보셨다고... 리습도 매우 다양해서리... 어떤 걸 해보셨는지... 암튼...제가 드리고 싶은 말씀은... 커먼 리습이나 스킴등은 사람들에 따라서 함수형 프로그래밍 언어로 분류하지 않기도 합니다. 함수의 부수효과가 없음이 전혀 보장되지 않기 때문이죠. 클로저는 모던 리습(Modern LISP)입니다. 확실한 함수형 언어죠. 한 번 공부해 보실 것을 적극 권유해 드립니다. ^^; 

    0
  • 하마
    6k
    2015-12-26 17:47:02

    구르마 님 오래전 글인데 장문의 댓글 남겨주셔서 감사합니다.

    클로저로 개발 해보고 싶긴한데.. 재귀적 마인드 &  )))) 의 압박이 주저하게 만드네요.

    (제 코드를 볼 다음사람도 고려해야하고)

    팁/테크란에 클로저에 대해서 아주 쉽고 짧막하게 한편씩 작성하여 주신다면 , 

    저 같은 보통 개발자에게 많은 도움이 될수 있을거 같습니다 :-D

    0
  • 구르마
    315
    2015-12-26 18:36:24

    리습이 괄호때문에 악명이 높긴한데... (사실 이것도 처음 익숙함의 문제이지만...)

    클로저는 모던 리습이라... 그래서... 과거 리습보다는 괄호가 적다는...  쿨럭...


    현재 뜻을 함께 한 분들과 함께 [클로저 완전정복]이라는 책을 쓰고 있습니다. CC 기반이구요. 

    그리고 클로저 입문 서적을 번역중인데요. 현재 번역은 다 끝나서 출판사로 넘아간 상태구요. 내년초에는 시중 서점에서 보실 수...

    그리고 또 제가 알고 있기로...현재 번역중인 클로저 책들이 있는데요. 하나는 클로저의 철학을 깊이 다룬 책이고, 다른 하나는 클로저 웹프로그래밍에 대한... 내년중에는 출판되지 싶네요. ^^;


    클로저에 대한 소개글로는 제가 테크수다에 작성한 기사를 참고하시는 것도 좋을 듯 합니다.

    [왜 클로저(Clojure)인가?] 1. 최후의 프로그래밍 언어

    [왜 클로저(Clojure)인가?] 2. 클로저(Clojure)의 본질적 우수성

    [왜 클로저(Clojure)인가?] 3. 단순성이 궁극의 정교함이다.

    [왜 클로저(Clojure)인가?] 4. 단순한 코드와 복잡한 코드


    얼마전에 IT 유니온 주관하에 [클로저 입문 강좌]를 무료로 진행한 적이 있는데요. 그 강좌 내용도 있으니 시작하시는데 도움이 될 수 있다면 좋겠네요.



    팁/테그란에 작성해 보는 것은 생각해 본 적이 없는데...

    시간이 되면 조금씩 함 해보는 것도 좋을 것 같네요. ^^;

    1
  • unclebab
    2016-10-31 23:29:33

    하마 님 말씀이 지나치시네요.

    TrustMe 님 말씀도 일리가 있습니다. 함수형 프로그래밍 언어의 최대 장점은 동시성이구요, 그 이유는 50대~100대 이상의 클러스터에서 분산 처리하는 걸 1년만 경험해 보시면 아실 겁니다. 자바, C++로 병렬처리 하는 것보다 몇배는 더 높은 비용적인 면에서 효율을 얻을 수 있습니다. (여기서 인프라, 개발, 유지보수, 배포 모두 포함한 비용입니다.)

    관련 링크 추가할게요.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/

    번역이 너무 잘 되어 있네요.

    제 개인적인 의견으로는 플랫폼이나 분야마다 강점이 있는 언어가 있는 게 아니겠어요? 함수형 프로그래밍 언어도 마찬가지로 제 역할을 하는 분야가 있기 때문에 아직도 살아있는 거라고 생각합니다. 그리고 그 분야가 미래에 주류가 될지 비주류가 될지는 아무로 모르는 것이죠.

    0
  • 하마
    6k
    2016-11-01 10:47:05 작성 2016-11-01 11:58:00 수정됨

    elbanic //

    워~워~   함수형 프로그래밍은 망했다. 쓸모없다라고 주장하는 글이 아니니 다시 정독하시구요.

    저도 요즘 AWS 클러스터 상에서 스칼라(Actor 동시성 기반 Akka) 로 마이크로서비스 모형을 구축하고 있습니다. 제가 함수형 언어를 쓴 다고 대중들도 다 썼으면 좋겠지만 그게 쉽지 않죠 ㅎㅎ  암튼 같이 열심히 해서 함수형 언어의 지분율을 올리는데 기여 해 봅시다.


    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.