본문 바로가기

book

쏙쏙들어오는 함수형코딩

책의 제목만 보면, 해당 책은 "프로그램 언어"에 대한 책인지, 설계방법인지, 디자인 패턴 같은 코딩에 부분인지

파악하기는 쉽지 않았습니다.

 

  이 책의 부제는 "심플한 코드로 복잡한 소프트웨어 길들이기" 입니다. 

  책의 두께는 500Page가 넘어서 꽤 두껍습니다.

 

  개발자들은 항상 고민을 하는 부분이 부제에 있습니다.

  개발을 진행하면서, 구현된 로직 및 동작 Flow에 많은 고민을 합니다.

  "다른 팀원이 보았을때, 이해가 쉬울까? 소스 분석이 쉬운 코드를 작성하고 싶다."

  "이 방법은 임시 처리 같은데, 조금더 나은 방법은 없을까?"

  "이 코드의 역활이 매우 불분명하다" 

 

 

 

이미 개발된 소스를 분석하게 되면, 잘 이해가 되지 않고, 분석하기 너무 어려운 코드들이 존재합니다.

특히, JS(javascript)로 개발된 소스를 보게 되면 함수 1개 안에서 CallBack -> CallBack -> CallBack등을 통해서

소스 분석이 매우 어려운 경우가 종종 있습니다.

 

JS는 일반 객체지향언어와는 다르게 매우 우연합니다.
ES6 버전으로 계속 새로운 spec을 지원하는 브라우저는 늘어나지만, 예전의 브라우저도 지원해야 하는 서비스Spec은 크게 

변하지 않습니다.

  • js는 function의 함수도 인자값으로 전달해서 사용할수 있습니다.
    특히 데이터처리시 Ajax로 비동기 통신을 하면서 CallBack으로 함수의 함수를 계속 이어서 사용되어집니다.
  • promise / async, await를 이용해서 구문을 명확히 하기도 하고, CallBack지옥에서 이제 헤어나올 방법이 생기기는 했습니다.
  • js의 객체지향을 구성하는 class가 있지만, 결국 이것도 new을 통한 객체를 통한 prototype, __proto__을 이용한 관계입니다.
  • 한 화면에서 여러가지 처리를 하기 위해서 SPA(React,Vue, Svelte등) 다양한 방법이 있지만, 이것이 최종 끝판왕은 아닙니다.

js로 된 소스 코드 debuging이 일반 Java, Python등과 같은 IDE에서 같이 편하게 breakpoint등을 활용한 개발환경 구축이 일반적이지

않은 부분도 하나의 원인이 되는것 같습니다.

전혀 안되지는 것은 아니지만 (VSCode, Webstorm등에서 커버가 되는 확인했습니다) 장벽은 있습니다.

소스코드에서 debugger 코드를 넣고 크롬에서 breakpoint를 걸어서 검증은 가능하지만, 이 역시 불편하기는 합니다.

 

 책을 보고 느낀점 부터 결론처럼 적어보겠습니다.

이 책에서는 함수형언어를 정의 하려고 하지 않습니다.

"본문내용 인용"
함수형 프로그래밍의 중요한 개념은 객체지향프로그래밍이나 절차적 프로그래밍을 가리지 않고
모든 프로그래밍 언어에서 쓸 수 있다는 것을 알았습니다.

대부분 사용하는 코드에 비슷한 패턴이나, 코드작성 습관을 개선할수 있게 도와주는 책이라고 생각이 들었습니다.

JS에서 비슷한 경험이나 (너무 콜백 함수가 많아서 답답)(서버 개발을 하다가 JS코딩을 할때 뭔가 많이 다른 언어적인 특징이 느껴질때),

답답함을 느껴보신 독자분이시면 이책을 통해서 자신만의 좋은 코딩 패턴 및 원칙을 세우실수 있을거 같습니다.

함수형 언어로는 가장 대중적인 Javascript를 통해서 코드 예시가 제공됩니다.

"본문 인용"
자바스크립트는 함수형 프로그램을 하기 좋은 언어는 아니지만, 함수형 프로그램을 하기에 부족하기 때문에
함수형 프로그래밍을 가르치기 좋은 언어입니다.
자바스크립트를 쓴다고 해서 이 책이 자바스크립트로 함수형 프로그래밍을 가르치는 책은 아닙니다.
그래서 이 책을 볼때 언어보다 개념에 좀 더 초점을 맞추는 것이 좋습니다.

보통 함수형 프로그래밍 언어로는 클로저, 스칼라, 하스켈 같는 것이 있습니다.

 

해당 책은 일반적인 프로그램언어처럼 1장 자료형, 2장 연산자, 3장 클래스, 객체, 4장 상속, 5장 I/O, 네트워크 등을 다루지 않습니다.

 

부제에서 메세지 처럼 "심플한 코드를 구성하는 좋은 코딩 습관"을 제공한다고 생각하시면 좋을거 같습니다.

+ 최근에 "리팩토링2" 책도 JS로 코드가 구성되어 있습니다.

+ 예전에 Head First 시리즈 같은 이해를 통해서 설명하는 방식도 생각이 났습니다.

+ 이 책의 컨셉은 계속 생각을 하게 만드는 구성으로 되어 있습니다. 

▦ 함수형 프로그래밍의 3가지 분류 개념

    ▷ 액션 : 실행시점, 횟수에 따라서 다른 결과를 수행. ex // 이메일 보내기, DB저장하기

호출시점이나 횟수에 의존하는지 판단해보기
암묵적인 입력 -> 함수의 인자로 변경
암묵적인 출력 -> 함수의 리턴값으로 변경

    ▷ 계산 :  같은 입력값이면, 같은 출력값을 수행. ex // 무언가 수행

    ▷ 데이터 : 정적인 정보 ['apple', 'banana' ]

       

이 3가지 개념을 가지고 계속 코드적으로 내가 작성하는 것은 저 3가지 항목중에 어느 부분인지 생각하게 합니다.

3가지 개념중에 분류가 되면, 이제 그에 맞는 작성 방법을 따르면 됩니다.

여기서 액션과 계산하는 것에 대한 구분이 조금 혼돈이 되고, 생각이 정리가 필요한 부분입니다.

계산과 데이터는 실행 시점, 회수에 의존하지 않습니다.

 

계층형 설계 (비지니스 규칙, 도메인 규칙, 기술스택 계층)에 대해서 언급을 합니다.

피자가게에서 피자를 만드는 과정을 함수형개념을 적용하면서, 저저분이 전달하려고 하는 내용을 하나씩

풀어서 함수형 시스템을 만들어갑니다.

 

지속적으로 내가 작성하는 코드에 대해서 액션, 계산, 데이터 레벨중에 어떻게 분리하여서, 

생각을 하고 접근해야 하는지 Iterater를 돌면서, 궁극적으로 내가 정리해서 프로그래밍을 하기전에

분리를 할수 있도록 반복 학습을 진행합니다.

함수형 프로그래머는 액션보다는 계산을 선호, 계산 보다는 데이터를 선호 합니다.

 

▦ 현실적으로 일어나는 Case-Study에 대한 고민들

    ▷ 일반적으로 코드에 액션이 너무 많이 사용되고 있는 반면에 계산은 거의 찾아보기 힘든 이유
    ▷ 왜 함수에 일반 데이터값을 전달하지 않고 함수를 전달하나요?

    ▷ JS를 할때, 인자값으로 function을 넘겨서, 해당 함수를 그대로 인자값으로 활용을 할 수 있다.
        처음에는 이 개념이 함수형 프로그램을 할때 다른 언어을 사용해본 분이라면 매우 어색하게 느껴진다.

        자바8부터 제네릭으로 함수형 인터페이스를 제공하고 있기는 합니다.
        이 개념을 고차함수라고 정의해서 사용한다. (P.263에서 다양하게 생성하는 방법과 사용되는 패턴이 설명되어 집니다.)

    ▷ map(), filter(), reduce() 활용
       IE에서는 지원이 지원이 안되는것이 많으니, Babel등을 사용하지 않는 경우에는 사용에 주의가 필요하다 

       예전 IE (6~11)에서는 지원을 하지 않습니다. 사용시 주의가 필요합니다. 예전 IE 지원을 위해서는 Babel등을 적용해야 합니다.

       2022.6.15일 부터 IE지원이 종료되고 Edge로 서비스 활용된다고 하니, 참고부탁드립니다.

    ▷ 자바스크립트 비동기 동작 방식

    ▷ 테스트 

DOM업데이트와 비지니스 규칙은 분리되어야 한다
전역번수가 없어야 한다.

 

▦ 책의 특징

    ▷ 누구나 좋은 코드를 작성하고 싶은데, 충분히 그런 고민을 같이 해주는 책이라고 생각이 들었습니다.

    ▷ 연습문제가 제공되는데, 충분한 생각꺼리를 제공합니다. (내것으로 만들기 위한 과정입니다)

    ▷ 다양한 시나리오를 가정하고, 이야기를 풀어가며 해결해 나갑니다.

    ▷ 얕은 복사, 깊은 복사, 방어적 복사에 대해서 심도있게 다룹니다.

    ▷ 계층형 설계 / 어니언 아키텍처 (액션은 외부영역, 계산과 데이터는 내부영역의 구조를 가지는 형태) 등 아키텍처 소개가 있습니다.

    ▷ 예제에 필요한 자바스크립트의 내용도 충분히 설명합니다.