/FunctionalProgramming

Primary LanguageJavaScriptApache License 2.0Apache-2.0

함수형 프로그래밍 스터디

함수형 프로그래밍이라는 개념과 철학을 공부해서 함수형 사고에 초점을 맞춥시다🔎

⛔️ 이 스터디는 팀 과제 중심형입니다.

🙋‍♂️진행 방식

  • 태오가 간단한 개념을 설명하고, 팀 별로 라이브 과제를 수행합니다.
  • 파랑이 복습용 과제를 할당하고, 이를 풀어 팀원들과 공유해봅니다.

🌟회차별 정리내용

1주차


2주차

  1. 액션 - "계산" - 데이터

  2. 계산을 꺼내기

    • 리턴값 정하기

    • 리턴값과 관계된 코드조각을 모으기 -> 함수로 만들어 좋은 이름 붙이기

    • 사용되는 모든 값을 함수 인자로 만들기

    • "명시적 출력" + "명시적 입력"

  3. 외부 세계에서 영향을 주거나, 실행할 때마다 달라지는 값을 방어적으로 복사

  4. 유틸리티 / 비즈니스 로직, 스키마 구분하기


WEEK 1 (~86p)

  • 액션
    • 암무적인 입출력이 있다면 그 코드는 액션
    • 액션인 함수가 하나라도 호출된다면 그 함수는 액션이 되므로 액션의 전파에 유의하자
    • 호출 시점에 따라서 다르게 동작하기 때문에 주의해야하는 코드이다.
  • 계산
    • 함수형 프로그래밍 개발자들이 가장 중요하게 여기는 로직
    • 인풋에 따라 항상 같은 아웃풋을 내준다. (순수함수)
    • 결정과 계획은 계산이 될 가능성이 높다
  • 데이터
    • 호출 불가능하다.
    • 데이터 자체로는 할 수 있는 것이 없다. (해석이 반드시 필요)
    • 동일성 비교, 자유로운 해석, 직렬화

으로 코드를 생각하며 작성해 보자

01번

- 이 함수는 전역 변수인 x를 사용합니다. 전역변수인 x 는 "암묵적 입력" 이며, 이 함수는 "액션"이 됩니다.
- 함수를 분리한 뒤, 지역변수를 사용하게 되면 "암묵적 입력"을 명시적으로 표현할 수 있습니다.

02번

- 매개변수로 전달된 arr을 복사 없이 그대로 참조하고 있습니다.
-  문제점은 실제로 arr의 값을 변경하면 부수효과가 나타납니다. (암묵적 입력)
-  이를 해결하기 위해 arr을 복사하여 사용하도록 수정할 수도 있고, 고차함수를 이용해서 해결할 수도 있습니다.    

03번

  • 문제점은 실제로 multiDimensionalArr의 값을 변경하면 부수효과가 나타납니다. (암묵적 입력)
  • 또한 이중 for문을 사용하고 있습니다. 계산을 더 작게 쪼갤 수 있으므로 'singleDimensionalAccumulate' 함수를 만들어서 역할을 분리했습니다.
  • i < index 는 이 함수의 비지니스 로직입니다. 이를 분리하면 더 좋은 코드가 될 수 있습니다.

04번

- 실제로 words의 값을 변경하면 부수효과가 나타납니다. (암묵적 입력)
- 계산 추출하기 -> words[i].length > 5 는 이 함수의 비지니스 로직입니다.
- map을 이용하여 고차함수로도 수정할 수 있습니다.


### 05번
- DeepCopy 를 하기위해 재귀함수로 생성
- 각각의 instance 를 검사하고 새롭게 생성하도록 로직을 짰습니다.