boostcamp

Day07 학습정리

daykim 2023. 7. 18. 14:57

JS는 진짜 너무 자유로워서 불안하지만, 그만큼 편하게 처리할 수 있는 것이 많아서 좋다.

 

함수형 프로그래밍


함수형 프로그래밍 원칙

  • 입출력이 순수해야한다.
  • 부작용이 없어야 한다.
  • 함수와 데이터를 중점으로 생각행야 한다.

순수함수란?

받은 인자'' 사용해서, 결과물을 내는 함수다.

부작용

프로그래머가 바꾸고자 하는 변수 외에는 바뀌어서는 안 된다는 뜻이다.
원본 데이터는 불변해야 한다는 것이다.

ex)

const arr = [1, 2, 3, 4, 5];
const map = arr.map(function(x) {
	return x * 5;
}):

// return : [5, 10, 15, 20, 25]
  • map 함수는 마지막에 설명한다.
  • arr를 사용했지만, 값은 변하지 않았고, map이라는 결과를 내고 다른 부작용도 없다.
  • 이런걸 순수 함수라고 한다.

 

순수함수는 왜 반복문을 사용하지 않는걸까?

 

고차함수

 

 

클로저


함수를 일급 객체로 취습하는 함수형 프로그래밍 언어에서 사용되는 중요한 특성이다.

 

렉시컬 스코프 (Lexical Scoping)

scope는 함수를 호출할 때가 아닌, 어디에 선언했는지에 따라 결정된다.
JS에서 함수 내부에 함수를 선언할 경우, 내부 함수는 외부 함수의 변수에 접근할 수 있다. 이 때 내부 함수의 상위 스코프는 외부 함수가 되는 것이다.
그럼 내부 함수의 렉시컬 스코프는 전역(외부함수가 전역에 선언된 경), 외부함수, 자신의 스코프로, 상위 스코프에 접근할 수 있다.

ex)

function outerFunc() {
  var x = 10;
  var innerFunc = function () { 
  	console.log(x); 
  };
  return innerFunc;
}


const inner = outerFunc();
intter(); //10
  • 아래 inner 예제를 보면, outerFunc()는 생명주기가 다 해 소멸했는데도, x값을 반환했다.

 

클로저 (Closure)

이처럼 외부함수보다 내부함수가 더 오래 유지되는 경우,
외부 함수 밖에서 내부 함수가 호출되더라도, 외부 함수의 지역 변수에 접근할 수 있는데 이러한 함수를 클로저라고 한다.
즉, 자신이 생성될 때 환경을 기억하는 함수다.

  • 람다계산식 구현체
  • 이름 없는 함수로 작성 가능하다.
  • 선언된 범위의 변수를 캡처해서 저장하고 (선언적으로) 닫힘

 

 

JS 컬렉션 인터페이스


아래 세가지 함수는 대표적인 함수형 프로그래밍 함수라고 한다.

 

map

배열 각 요소에 대해 주어진 함수를 수행한 결과를 모아, 새로운 배열을 반환하는 메서드다.

  • 예제는 앞서 설명했으니 생략한다.
  • 3개의 매개변수를 갖는다.
  • value : 현재 요소
  • index : 요소의 인덱스    // 필수X
  • array : map()을 호출한 원본 배열    // 필수X

 

filter

배열 각 요소에 대해 주어진 함수의 결과값이 true인 요소를 모아 새로운 배열을 반환하는 메서드다.

  • 3개의 매개변수를 갖는다.
  • value : 현재 요소
  • index : 요소의 인덱스    // 필수X
  • array : map()을 호출한 원본 배열    // 필수X
const comic = ['슬램덩크', '짱구', '미피', '디지몬', '포켓몬'];
const comicFilter = comic.filter(c => c.length === 3);

// return ['디지몬', '포켓몬']

 

reduce

배열 각 요소에 대해 reducer 함수를 실행하고, 배열이 아닌 하나의 결과값을 반환한다.

  • 4개의 매개변수를 갖는다.
  • accumulator : 리턴한 값을 저장하는 변수. 초기값을 지정하면 초기값부터 시작한다.
  • currentValue : 현재 요소
  • currentIndex : 요소의 인덱스    // 필수X
  • array : map()을 호출한 원본 배열    // 필수X
const numbers = [1, 2, 3, 4, 5];
const numberSum = numbers.reduce((acc, cur) => {
    return acc + cur);
});

// return : 10

// 초기값을 입력하는 경우
const numbers = [1, 2, 3, 4, 5];
const numberSum = numbers.reduce((acc, cur) => {
    return acc + cur);
}, 초기값);
  • reduce 함수에서 값을 계속 누적해 갖고 있는 누산기인 acc와 현재 요소인 cur를 매개 변수로해, 모든 요소의 합을 반환하는 로직이다.
  • reduce 함수를 수행하며 생기는 값을 임시적으로 보관하는 형태다.

 

참고자료

'boostcamp' 카테고리의 다른 글

Day09 학습 정리  (0) 2023.07.20
Day08 학습 정리  (0) 2023.07.19
Day06 학습 정리  (0) 2023.07.18
Day04 학습 정리  (0) 2023.07.13
Day03 학습정리  (0) 2023.07.12