:함수와 그 함수가 선언됐을 때의 환경을 함께 기억하는 함수형 프로그래밍의 개념
스코프 체이닝은 안에서부터 밖으로 나감
호출, 정의 개념 꼭 알기 (*제일 헷갈림)
-> 스코프는 함수가 정의 됐을 때 결정됨
=> 외부 함수가 중첩 함수보다 더 오래 유지되는 경우, 중첩 함수는 이미 생명 주가가 종료한 외부 함수의 변수를 여전히 참조할 수 있다. 이 개념에서 중첩 함수가 클로저임
( .... 예? 🧐 )
응용) 보안 (외부에서 허용하지 않는 은닉된 변화) + 이전 상태 유지
( 네? )
어싱크, 어웨이트, 프로미스
동기적 흐름, 동기적인 코드 실행 = 순서대로 위에서부터 차례대로 실행
비동기적인 코드 흐름은 다른 것부터(바로 뒤에 있는 것)부터 실행
-> 0초여도 그 다음에 실행됨
=> 동기적인 흐름이 종료된 이후에 비동기 실행
어떤 코드들이 비동기적으로 작동하는가에 대해서는 좀 더 공부를 하긴 해야 하나, 프론트엔드 부분에서는 패치 정도로 생각하면 됨 -> 내장 함수 fetch() 등 (제이슨 플레이스 홀더_가짜 정보 호출하는 api 사이트도 있음)
이거는 외우자!
promise는 비동기적인 작업을 해 주겠다는 약속이다.
비동기를 동적으로 작동하게 하는 게 await
프로미스의 상태 3가지 (콘솔로그에서도 확인 할 수 있다.)
1. pending : 약속을 막 한 상태
( 약속은 동기적인 거 다 실행한 이후에 실천하러 감!)
다시 한 번....
"비동기 작업은 약속(promise)을 돌려준다."
e.g. const something = fetch(url)
something에는 프로미스를 반환 (fetch는 대표적인 비동기 함수이고, 비동기 함수는?)
약속의 결과를 가지고 뭔가를 하고 싶을 때, 다른 동기 다 끝나고 하는 게 아니라 그때 실행하고자 하면?
두 가지 방안이 있음.
약속이 수행 또는 실패한 이후 (fulfilled or rejected) 실행할 코드는 어떻게 작성하는가?
then 사용
단, 스코프 내부에 정보를 담아야 한다.
await 사용 (추천)
단, 사용하려면 어싱크를 붙여야 한다.
-> async - await 는 페어
(=> 즉, 전역에서 await 홀로 쓰기가 불가능하다는 뜻이기도 함)
어싱크를 붙이면 비동기 함수가 됨. 비동기 함수를 기다리기 위해서는 기다리는 것 자체가 비동기가 되어야 한다. (= await를 쓰려면 async가 필요하다는 말)
전역에서 await가 불가능하므로, 전역에서 이를 가져오려면 두 가지 방법이 있다. 하나는 위에 언급한 then (스코프 내부에서 쓰면 됨) 과 new promise 방법
e.g. 1) 뉴 프로미스 사용법 ( '그냥 왠지 3초 후에 api 정보를 받아보고 싶어' 의 예시)
async function callAPIAfter3Seconds () { const 약속 = await new Promise((resolve) => { setTimeOut(() => { const url = ''; const response =fetch(url); resolve(response); }, 3000); }); callAPIAfter3Seconds();
(...인데 일단 뉴 프로미스 관련해서는 좀 더 공부해보기로....! 😕😞😖)
전역에서 await가 아니라 then을 써야 하는 순간이 있는데, 그때 반환된 promise가 아니라 리턴 값을 사용할 방법도 있다. (비동기 함수는 promise를 반환하는데 then을 예쁘게 잘 사용하면 리턴 값 사용 가능)
e.g. 2) then을 사용해 리턴 값 사용하기
async function someFunction () { const url = "주소"; const response = await fetch(url); return 5; } const value = someFunction.then((a)) => console.log("a",a));
이 때 a는 5를 반환
(정리)
1. 어싱크 - 어웨이트는 꼭 같이 써야 한다.
2. 따라서 어웨이트는 혼자 쓸 수 없음
3. 즉, 전역에서 쓸 수 없다는 건데 그 해결법으로 2가지가 존재
3-1. then 쓰는 것
3-2. 뉴 프로미스 쓰는 것
4. 어싱크 함수는 무조건 프로미스를 반환한다. (이건 외울 것)
5. 그런데 어싱크 함수 내에서 발생하는 리턴 값을 이용하고 싶을 땐 어떻게 하느냐? 그럴 때 then을 써서 값을 가져오면 된다.
6. 비동기 함수 사용처는 외우는 것이 편하지만, 프론트엔드 쪽에서는 패치 가져오는 것이 대부분이라 외우는 것에 힘쓰지 않아도 된다.
19:00-20:00 강의
git branch ㅁㅁㅁ 로 생성 (아무것도 안 뜸)
확인 명령어 git branch 초록색 => 내가 위치한 브랜치 -> 확인 후 q로 빠져나가기
수정본 수정하기 위해서 복사한 거 열기 위해서 이동 (코드를 바꿔도 메인에서는 영향 x)
-> ㅁㅁㅁ에서 수정하면 메인에선 어떨까? 당연히 수정 안 됨 (확인 하는 방법은 git switch main으로 가보면 됨
사실 git merge 안 씁니다^.^ !!
터미널 말고 github 온라인 저장소에서 합치자
Pull request로 merge 할 수 있음
: 당겨서 합친다. : 요청한다.
머지 하지 않고, 그냥 저장 -> 푸쉬한다!
git push origin ㅁㅁㅁ
=> 하고 나면 gitub에 브랜치가 보인다! (from 잘 확인)
초록 버튼 클릭 클릭 merge pull request…
하면 깃헙에서 알아서 합쳐줬다!
잠깐!!
=> 문제가 또 있다 ^.^!!
main 브랜치 === 배포용
으로, 완성된 친구 올려야 함
해결책 1) main 브랜치 (배포용) -develop 브랜치 (테스트용) - 기능 브랜치 (기능 개발용)
3단계
해결책 2) 로컬 (= 내 컴퓨터) 에서 먼저 테스트
기능 브랜치인 내 쪽에서 데브 브랜치를 끌고 와서 먼저 테스트 한다.
git pull origin dev
이 때는 충돌 시 해결방법이 있다.
——
(아마)… 확인 해보기….ㅎㅎ
git clone -> git switch -c ㅁㅁㅁ (알아서 깃헙에 올라감)-> add. commit -> git pull origin dev -> git push 기능 브랜치 -> 깃허브에서 git merge
단계가 맞는지 확인 하기...^^