함수형 프로그래밍이라는 개념과 철학을 공부해서 함수형 사고에 초점을 맞춥시다🔎
⛔️ 이 스터디는 팀 과제 중심형입니다.
-
액션 - "계산" - 데이터
-
계산을 꺼내기
-
리턴값 정하기
-
리턴값과 관계된 코드조각을 모으기 -> 함수로 만들어 좋은 이름 붙이기
-
사용되는 모든 값을 함수 인자로 만들기
-
"명시적 출력" + "명시적 입력"
-
-
외부 세계에서 영향을 주거나, 실행할 때마다 달라지는 값을 방어적으로 복사
-
유틸리티 / 비즈니스 로직, 스키마 구분하기
- 액션
- 암무적인 입출력이 있다면 그 코드는 액션
- 액션인 함수가 하나라도 호출된다면 그 함수는 액션이 되므로 액션의 전파에 유의하자
- 호출 시점에 따라서 다르게 동작하기 때문에 주의해야하는 코드이다.
- 계산
- 함수형 프로그래밍 개발자들이 가장 중요하게 여기는 로직
- 인풋에 따라 항상 같은 아웃풋을 내준다. (순수함수)
- 결정과 계획은 계산이 될 가능성이 높다
- 데이터
- 호출 불가능하다.
- 데이터 자체로는 할 수 있는 것이 없다. (해석이 반드시 필요)
- 동일성 비교, 자유로운 해석, 직렬화
으로 코드를 생각하며 작성해 보자
- 이 함수는 전역 변수인 x를 사용합니다. 전역변수인 x 는 "암묵적 입력" 이며, 이 함수는 "액션"이 됩니다.
- 함수를 분리한 뒤, 지역변수를 사용하게 되면 "암묵적 입력"을 명시적으로 표현할 수 있습니다.
- 매개변수로 전달된 arr을 복사 없이 그대로 참조하고 있습니다.
- 문제점은 실제로 arr의 값을 변경하면 부수효과가 나타납니다. (암묵적 입력)
- 이를 해결하기 위해 arr을 복사하여 사용하도록 수정할 수도 있고, 고차함수를 이용해서 해결할 수도 있습니다.
- 문제점은 실제로 multiDimensionalArr의 값을 변경하면 부수효과가 나타납니다. (암묵적 입력)
- 또한 이중 for문을 사용하고 있습니다. 계산을 더 작게 쪼갤 수 있으므로 'singleDimensionalAccumulate' 함수를 만들어서 역할을 분리했습니다.
- i < index 는 이 함수의 비지니스 로직입니다. 이를 분리하면 더 좋은 코드가 될 수 있습니다.
- 실제로 words의 값을 변경하면 부수효과가 나타납니다. (암묵적 입력)
- 계산 추출하기 -> words[i].length > 5 는 이 함수의 비지니스 로직입니다.
- map을 이용하여 고차함수로도 수정할 수 있습니다.
### 05번
- DeepCopy 를 하기위해 재귀함수로 생성
- 각각의 instance 를 검사하고 새롭게 생성하도록 로직을 짰습니다.