4주차_TIL
16 Nov 2020 -
2 minute read
- 201116 DAY16: Underbar
- 201117 DAY17: 비동기 호출
- 201118 DAY18: 재귀
- 201119 DAY19: stringifyJSON
- 201120 DAY20: API
201116 DAY16: Underbar
배열, 객체를 다루는 라이브러리: underscore, lodash
- 배열, 객체를 다루기 위한 라이브러리를 직접 구현해본다.
- 자바스크립트 배열 내장 메소드(forEach, map, filter, reduce 등)의 원리를 이해할 수 있다.
- higher order function을 활용하여 기존에 만든 함수를 callback으로 재사용한다.
- iteratee === callback 함수
201117 DAY17: 비동기 호출
비동기 호출
- 고차 함수가 콜백 함수를 실행할때, 즉시 실행(synchronously)하거나, 나중에 실행(asynchronously)할 수 있다.
- iterator: 반복 실행되는 함수
- eventHandler: 이벤트에 따른 함수
blocking vs. non-blocking
- blocking: 하고 있던 작업에 대한 blocking이 일어난다. => 요청에 대한 결과가 동시에 일어난다. => 동기(synchronous)
- non-blocking: 나중에 실행할 수 있다. => 요청에 대한 결과가 동시에 일어나지 않는다. => 비동기(asynchronous)
비동기의 주요 사례
- DOM element의 이벤트 헨들러
- 타이머 API(setTimeout)
- 서버에 자원 요청 및 응답(서버 요청 API)
201118 DAY18: 재귀
재귀(recursion)
- 어떤 문제를 해결할 때, 구조는 동일하지만 더 작은 경우를 해결함으로써 그 문제를 해결하는 방법
- 주어진 문제가 구조가 비슷한 더 작은 문제로 나뉘어 질 수 있는 경우, 중첩된 루프가 많거나 중첩의 정도를 미리 알 수 없는 경우
- 모든 재귀 함수는 재귀 호출 없이 while / for loop로 표현이 가능하다. 그러나 재귀를 사용한 코드가 더 간결하고 이해하기 쉽다.
- 재귀 함수: 스스로를 호출하는 함수
재귀적 사고
- 재귀 함수의 입력값과 출력값 정의하기: 문제를 가장 추상적으로, 단순하게 정리
- 문제를 쪼개고 경우의 수를 나누기: 어떤 기준(입력값)에 따라 문제를 구분할 수 있는지 검토 ex)순서, 크기
- 단순한 문제 해결하기: 재귀의 기초(base case)를 기반으로 재귀의 탈출 조건(재귀 호출이 멈추는 조건)을 구성하기
- 복잡한 문제 해결하기
201119 DAY19: stringifyJSON
JSON
- JSON 구조: 재귀 함수를 사용할 수 있는 Tree 구조(stringifyJSON)
- JSON.stringify: seriealize / JSON.parse: deserialize
- JSON(JavaScript Object Notatio): 데이터 교환을 위해 만들어진 포맷. 객체가 전송 가능하려면 수신자, 발신자 모두 같은 프로그램을 쓰거나, 문자열과 같이 범용적으로 읽을 수 있는 형태여야 한다. JSON은 서로 다른 프로그램 사이에서 데이터를 교환하는 포맷이며, 단순히 자바스크립트에서만 쓰이는 것이 아니라 다른 언어에서도 범용적으로 쓰인다.
- JSON.stringify: 객체를 문자열로 변환하는 함수 //직렬화(serialize)
- JSON.parse: 문자열을 다시 객체로 변환하는 함수 //역직렬화(deserialize)
- JSON 문법: 키는 반드시 쌍따옴표를 붙여야 하며, 문자열 값 또한 쌍따옴표로 감싸야 함. 또한 키와 값 사이, 키-값 쌍 사이에 공백이 있어서는 안된다.
201120 DAY20: API
API
- API(Application Programming Interface): 서버가 클라이언트에게 리소스를 잘 활용할 수 있도록 인터페이스를 제공한 것
- 자원(resource): 제공하는 정보
- 서버(server): 자원을 제공하는 주체
- 클라이언트(client): 자원을 요청하는 사람, 혹은 프로그램
- 보통 인터넷에 있는 데이터를 요청할 때는 HTTP라는 프로토콜을 사용하며, 주소(URL, URI)를 통해 접근 가능하다.
- API key: 자원에 접근할 수 있는 권한
- fetch API: 서버에 HTTP(URL)를 요청하는 것. 응답은 다양한 형태로 받을 수 있다.(JSON, HTML, Plain text 등)