February 6, 2021 • ☕️☕️ 8 min read
우테코 1주차 기록
월요일 오전 잠시 들어와 본 나밖에 없는 미팅룸…
호출 방식에 따라서 동작하는 범위가 달라지고, js 인터프리터를 사용하여 계산이 무거워진다고 한다. 여태까지도 뭔가 옳은 방식의 코드는 아닌 것 같아 쓰지 않았는데, 이번 기회에 간단하게 eval을 사용하면 안 되는 이유를 알고 더욱 주의해야겠다 😮
Ref https://velog.io/@modolee/javascript-eval-is-evil/@modolee/javascript-eval-is-evil
es6에 새로 등장한 문법이다. 우리말로는 ‘구조 해체 할당’이라고 한다.
destructuring은 array의 값이나 object의 프로퍼티들을 프로그램 안에서 쓸 수 있는 변수로 만들어 준다. destructing은 언제 필요할까? 🤔
const developer = {
name: "Zig Song",
level: "Junior",
stacks: {
html: 9,
css: 8.5,
javascript: 7,
},
};
const displayDetail = (data) => {
const name = data.name;
const level = data.level;
const htmlRating = data.stacks.html;
const cssRating = data.stacks.css;
const javascriptRating = data.stacks.javascript;
console.log(name, level, htmlRating, cssRating, javascriptRating);
};
displayDetail(developer);
누가 봐도 displayDetail
함수 안에서 data
가 쓸데없이 많이 중복되고 있는 것을 알 수 있다.
이를 아래처럼 destructing으로 바꿔쓰면 더욱 직관적이다.
const {
name,
level,
stacks: { html, css, javascript },
} = developer;
array destructing은 아래와 같은 방식으로 작성한다.
const profile = ["zig song", "student", "25"];
const displayProfile = (data) => {
const name = data[0];
const job = data[1];
const age = data[2];
console.log(
`Hello my name is ${name} and I'm ${age} years old. I'm a ${job}.`
);
};
displayProfile(profile);
const [name, job, age] = profile;
console.log(name); // zig song
console.log(job); // student
console.log(age); // 25
destructing 구문 안에서 변수의 이름을 특정한 이름으로 지정해주거나, rest operator를 사용하여 사용하지 않는 변수들을 일괄 처리하는 팁들도 있다 😉
Ref https://medium.com/better-programming/demystifying-modern-destructuring-in-javascript-918295756b1f
package-lock
에는 프로젝트의 의존성 모듈들에 대한 버전 정보가 들어있다. 그래서 lock 즉 외부로부터 영향 받지 않기 위해 잠금 처리를 한다.
lock을 통해 여러 개발자가 코드를 올리고 내려 받는 프로젝트에서, 설치 시점에 상관없이 항상 동일한 버전의 패키지가 설치되는 것을 보장받을 수 있다.
yarn
을 사용한다면 yarn.lock
이라는 이름으로 생성된다.
Ref https://www.daleseo.com/js-package-locks/
웹 브라우저에서 javascript를 동작하게 해주는 javascript 엔진(ex. v8)은 memory allocation이 발생하는 heap과 execution contexts가 담긴 stack으로 구분된다.
javascript는 single call stack을 갖고 있는 single thread language다.
function multiply9(a, b) {
return a + b;
}
function square() {
return multiply(n, n);
}
function printSquare(n) {
var squared = square(n);
console.log(squared);
}
printSquare(4);
위 코드에서 stack에는 main()
→ printSquare()
→ square()
→ multiply()
순서대로 함수가 stack에 쌓이고 LIFO(Last-In-First-Out) 방식으로 호출된다.
이때 비동기 request가 각각 호출되면, 첫 번째 호출이 완료되는 동안 다른 어떤 동작도 할 수 없다. 이를 blocking이라고 한다. 이 문제를 해결하기 위해 asynchronous callback이 사용된다.
javascript 콜 스택은 한 번에 한 가지 일밖에 할 수 없다. 그래서 setTimeOut()
등의 비동기 request가 호출되면 해당 함수는 stack에 쌓이고, callback으로 처리된다. 이때 web API는 해당 비동기 callback이 실행되기까지 기다리고, stack에서 해당 호출은 빠지고 다음으로 실행할 요청들을 담는다. (이때 callback 함수를 task queue에 등록하는 처리는 자바스크립트 엔진이 아니라 브라우저가 실행한다!) web API에서 callback의 호출이 마무리되면 task queue에 해당 task가 담기고, stack이 빌 때까지 기다렸다가 event loop를 통해 stack에 다시 담겨 실행된다.
즉 비동기 실행 함수는 stack → web API → task queue → stack 순으로 이동한다.
Ref
질문 잘 하는 법 질문 잘 하는 법
페어 프로그래밍 짝 프로그래밍이란
패키지 매니저 관련 VS코드에서 패키지 매니저 확인하는 기준 젯브레인에서 패키지 매니저 확인하는 기준 VS 코드 개발팀이 실제로 패키지 매니저를 자동으로 감지하고자 추가했던 코드
TDD, BDD TDD 묻고 BDD로 가!
개발자 커뮤니티 슬기로운 개발자 생활 - OKKY
javascript 코딩 스타일 클린 코드 자바스크립트
standard
라는 npm 패키지를 사용한다.👻 아래는 읽어보기! 자바스크립트 스탠다드 스타일 Airbnb JavaScript 스타일 가이드 클린 코드 타입스크립트
네이버 fe news naver fe-news
cypress cheat sheet cypress cheat sheet