일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 프로그래머스
- 자료구조
- web
- useState
- 30daysdowoonchallenge
- 스택
- 큐
- html
- 회고
- superstarjypnation
- redux
- UX
- CSS
- 프로토타입
- javascript
- UI
- 카카오
- 운영체제
- 코드스테이츠
- 해시테이블
- React
- vercel
- REST_API
- 생활코딩
- 자바스크립트
- mysemester
- Next.js
- 백준
- level1
- Til
- Today
- Total
데굴데굴
TIL: 2022-09-20 🤯 본문
⚙️ 오늘 배운 주제
고차함수
🐹 오늘의 기분
이름부터 범상치 않은 고차함수를 배웠다. 오전에 혼자 코플릿을 푸는데 처음 세션에서 시간이 부족해서 어라..? 하면서 후다닥 풀어제꼈다. 페어분 봽기 전에 남은 문제를 더 살펴볼 걸 그랬다. 문제를 아예 처음 보니 뇌정지가 와서 한참 헤맸었다. 게다가 일부 개념은 와닿지 않은 상태로 푸니 오류도 수없이 마주했었다. (reduce가 내 발목을 잡았다)
오늘 학습 요약
- 학습할 때: "어..?"
- 라이브세션: "아...?"
복습하면서 점차 "아...!"로 바뀌길 기대해봐야지
🗝 키워드
일급객체, 고차함수, 커링함수, 콜백함수, filter, map, reduce, 추상화, 값 수준에서의 추상화, 사고 수준에서의 추상화
🗣 스스로에게 설명
일급 객체 first-class citizen
함수는 일급객체에 해당한다.
일급 객체는 변수에 할당이 가능하고, 다른 함수의 전달인자로 쓰일 수 있으며, 다른 함수의 결과로서 리턴될 수 있다.
일급 객체는 문자열, 숫자와 같이 다른 데이터처럼 사용할 수 있다.
고차함수 High order Function
아래 두 조건 중 하나 이상을 만족하면 고차함수이다.
- 함수를 전달인자로 받는다.
- 함수를 리턴한다.
1번 조건을 만족할 때 전달인자로 전달되는 함수를 콜백함수(callback function)라고 한다.
클로저도 함수가 일급 객체이기 때문에 가능한 것이다.
JavaScript에는 여러 고차함수가 내장되어 있다.
오늘은 filter, map, reduce를 학습했다. 이 외에도 배열에는 some, every 등 여러 고차함수가 존재한다.
Array.prototype <- 이렇게 쓰는 이유는 객체지향을 배우면 알 수 있다고 하셨다. 내일 바로 객체지향인데 궁금
Array.prototype.filter()
→ 콜백함수에 작성된 조건에 부합하는 요소만 분류하여 배열로 리턴한다.
function isBiggerThan10(value) {
return value >= 10;
}
let arr = [1, 5, 7, 10, 17, 29];
arr.filter(isBiggerThan10); // [10, 17, 29]
필터링한다고 해서 원본 배열 arr의 값이 바뀌는 것은 아니다. (immutable)
Array.prototype.map()
→ 배열의 모든 요소에 콜백함수를 적용한 새 배열을 리턴한다.
function square(value) {
return value * value;
}
let arr = [1, 2, 3, 4, 5];
arr.map(square); // [1, 4, 9, 16, 25]
이 또한 마찬가지로 원본 배열을 훼손하지 않는다.
따라서 고차함수를 적용한 배열을 활용하고 싶다면 결과를 변수에 새롭게 할당해주어야 한다.
Array.prototype.reduce()
→ 배열의 각 요소를 콜백함수에 따라 하나의 형태로 압축한다. (하나의 결과값을 리턴한다)
reduce 메소드는 아래와 같이 쓰인다.
arr.reduce(콜백함수, 초기값(optional))
reduce 메소드에 들어가는 콜백함수에는 기본적으로 두 인자가 요구된다.
function(응축값, 현재값)
// 배열의 모든 요소를 더하기
const adder = function (acc, cur) {
return acc + cur;
}
let arr = [5, 7, 10, 14, 19];
arr.reduce(adder, 0) // 55
함수를 통해 반복되는 복잡한 로직을 저장해두고 필요할 때 끌어다 쓸 수 있다.
이는 일종의 추상화에 해당한다.
함수에서는 값 수준에서의 추상화만 일어난다.
함수의 추상화를 한 단계 더 높인 것이 고차함수이고, 여기서는 사고 수준의 추상화가 일어난다.
추상화의 수준이 높아질수록 생산성은 높아진다. (아래 링크 참고)
추상화 - 용어 사전 | MDN
컴퓨터 프로그래밍에서의 추상화란 복잡한 소프트웨어 시스템을 효율적으로 설계하고 구현할 수 있는 방법입니다. 추상화는 뒷편 시스템의 기술적 복잡함을 단순한 API 뒤에 숨깁니다.
developer.mozilla.org
❓ 막히는 or 막혔던 부분
reduce는 반복문을 처음 배울 때의 감정을 느끼게 해주었다.
그래도 라이브 세션 들으니까 뭔가 정리가 되는 기분이었음
배열일 때는 괜찮았는데 문제에서 객체만 나오면 잠깐 사고가 정지됐었다.
🔍 공부가 더 필요한 부분
reduce 메소드
객체가 나오는 코플릿 문제 다시 풀어보기
🛠 질문 만들기
- 한 배열에서 짝수에 해당하는 요소만 걸러내고 싶을 때 배열의 내장 고차함수 중 어떤 메소드를 써야하는가?
- 고차함수를 활용하면 어떤 수준의 추상화가 가능하며, 추상화를 했을 때의 장점은 무엇인가?
'Lesson > TIL' 카테고리의 다른 글
TIL: 2022-09-22 (0) | 2022.09.22 |
---|---|
TIL: 2022-09-21 (0) | 2022.09.21 |
TIL: 2022-09-16, 첫 솔로 프로젝트 짤막한 회고 (0) | 2022.09.16 |
TIL: 2022-09-15 (0) | 2022.09.15 |
TIL: 2022-09-14 (0) | 2022.09.14 |