diff --git "a/\354\261\225\355\204\260_10/\354\240\225\353\214\200\354\234\244.md" "b/\354\261\225\355\204\260_10/\354\240\225\353\214\200\354\234\244.md" new file mode 100644 index 0000000..343b476 --- /dev/null +++ "b/\354\261\225\355\204\260_10/\354\240\225\353\214\200\354\234\244.md" @@ -0,0 +1,47 @@ +# 일급 함수 1 + +> 1. 왜 일급 값이 좋은가? +> 2. 일급 함수로 변경하는 법. + +## 함수 이름에 있는 암묵적 인자 드러내기 + +함수 이름이 함수의 구현에 있는 다른 부분을 가르킴. +ex) set`Price`ByName set`Tax`ByName + +1. 함수이름에 암묵적인자를 확인 - set`Price`ByName +2. 명시적 인자 추가 - setFieldByName(target, name, `'price'`, value); + => 이를 통해 `중복`을 줄일 수 있다. + 이는 함수이름에 암묵적인자인 price를 `일급값`으로 변경하여 리팩터링. + +> 일급 값? +> 함수의 인자로 리턴값으로 쓰일 수 있으며, 변수, 객체, 배열의 값으로 사용될 수 있는 것. + +여기의 예시처럼 어떤 내용을 변경하는데 setFieldByName과 같은 것들을 실제로 정의하고 사용한 경험이 있는지 궁금함. +약간 useReducer 같은데서 action을 통해서 저렇게 사용되려나... + +### 객체와 배열을 너무 많이 사용하는 것 같다. (데이터 지향 원칙) + +중요한건 데이터를 사용할 때 임의의 인터페이스로 감싸지 않고 그대로 사용한다는 점이다. +이를 통해 여러 가지 방법으로 해석이 가능하다는 것이다. +엔티티는 보통 일반적이고 재사용할 수 있어야하기에 형식적인 객체와 배열을 사용해야한다. +이를 인터페이스를 잘 설계해 데이터를 정해진 방법으로만 쓸 수 있다. + +## 함수 본문을 콜백으로 바꾸기 + +1. 본문과 본문의 앞,뒤를 구분 -> 본문의 범위 찾기 +2. 전체를 함수로 빼기 -> 본문을 함수로 변경 +3. 본문을 빼낸 함수의 인자로 전달한 함수로 변경 -> 콜백 전달 및 실행 + => `중복`을 줄일 수 있음. + +```js +function foo(f = "콜백") { + try { + f(); // 함수 본문 + } catch (e) { + logger(e); + } +} +``` + +> 콜백 함수 사용이유는 특정 구분의 특정 문맥안에서 실행되야되서 (ex. try-catch) +> 따라서 고차함수를 쓰면 고차함수의 정의된 문맥에서 코드를 실행 할 수 있음.