23.07.10
변수 선언과 할당
함수 호출
내가 보는 코드에서 이 변수가 언제 선언되고, 무엇이 할당되었고, 어딜 가리키고 있는지 아는게 중요함
스코프 = 범위
스코프 내부에 어떤 변수가 있고, 어떤 함수가 있고, 이 함수를 쓰면 어디를 가는지 경로를 아는게 중요함
자바스크립트는 코드 실행 전 컴파일 단계(= 기계가 이해할 수 있도록 변경하는 단계)에서 변수와 함수의 선언을 먼저 처리하기 위해 코드 내부에 있는 모든 변수와 함수를 위로 끌어올려 ‘스코프’를 설정 => 이것을 '호이스팅'이라고 함
이 모든 과정이 일어나는 곳이 ‘실행 컨텍스트’ => 즉, 실행 컨텍스트는 코드의 실행을 위한 환경으로 스택(stack) 형태로 관리되고 각 스코프에 대한 정보를 갖고 있음
실행 컨텍스트 내부에는 ‘변수 환경’이라는 컴포넌트가 있는데, 이는 해당 컨텍스트 내에서 선언된 변수와 함수를 관리하는 역할
이것이 바로 ‘스코프’와 관련된 부분, 스코프에 따라 접근 가능한 변수와 함수가 결정
결국 자바스크립트에서의 변수 선언, 할당, 스코프는 모두 '실행 컨텍스트'라는 큰 틀 안에서 진행되며, 이들은 서로 긴밀하게 연결되어 코드의 실행 흐름을 결정
Promise : 비동기 연산을 더 쉽게 하기 위해 추가된 객체로 비동기 코드 = "언젠가 완료될 작업"
그렇다면 여기서 비동기 코드란 ? 순서를 기다리는 것이 아니라 일단 뒤에 코드들을 먼저 실행하는 것 => 즉, 순서가 없음
ex. 카페에 손님들이 주문하려고 줄을 서있을 때, 직원은 손님 한 명 한 명의 주문을 처리하는 것이 아닌 모든 손님의 주문을 받고 각 손님에게 진동벨을 주며 음료 제조가 끝나면 한명씩 다시 부르는 것과 유사
async - await : Promise를 쉽게 사용할 수 있도록 도와주는 문법이고, syntax sugar라고 함
그렇다면 여기서 syntax sugar란 ? 기본적인 기능을 변경하지 않으면서 코드의 가독성을 향상시키는 문법
async - await은 비동기 작업이 완료될 때까지 기다렸다가 완료되면 다음 작업을 수행하게 해줘서 block 문법이라고 표현하기도 하고 이를 통해 코드를 마치 동기적인 코드처럼 작성할 수 있음
Code after each await expression can be thought of as existing in a .then callback. In this way a promise chain is progressively constructed with each reentrant step through the function. The return value forms the final link in the chain.
=> 즉 awiat은 Promise의 then을 표현하는 또 다른 문법일 뿐
객체 : 중괄호 {} 안에 key, value로 값을 저장하는 것
클래스(Class) : 붕어빵 틀 => 붕어빵 틀이 붕어빵의 모양과 구조를 정의하는 도구처럼 클래스에서 객체의 모양이나 구조를 정의
인스턴스(= 객체): 붕어빵 => 붕어빵이 붕어빵 틀에서 만들어지는 것처럼 '인스턴스'는 클래스를 통해 생성된 실제 '객체'를 의미
인스턴스화 : 붕어빵 틀에서 붕어빵이 만들어지는 과정 => 클래스를 통해 인스턴스가 만들어지는 과정
하나의 붕어빵 틀에서 여러 개의 붕어빵을 만들 수 있음 => 하나의 클래스에서 여러 개의 동일한 구조를 가진 객체를 만들어낼 수 있음
클래스의 특징 3가지
생성자 : 틀에 반죽과 팥 등을 넣어서 붕어빵을 만드는 과정 => 즉, 생성자는 객체를 만드는 과정으로 인스턴스를 생성할때 실행되며 클래스를 이용해 실제 초기값의 객체를 만드는 역할
객체를 만들어주는, 초기 상태의 객체를 반환하는 함수
메서드 : 클래스 내부에 객체의 특징적인 동작을 정의하는 함수, 해당 클래스가 생성한 인스턴스(객체)에서 호출할 수 있음
(클래스) 상속 : 붕어빵 틀을 기반으로 새로운 틀을 만드는 것 => 즉, 기존 클래스를 확장하여 새로운 클래스를 만드는 것
이처럼 클래스라는 설계도를 통해서 같은 특징을 가진 객체들을 효율적으로 관리할 수 있음
관계형 데이터베이스 vs 비관계형 데이터베이스
테이블 = 컬렉션
열/행 = 문서
컬럼 = 필드
'데이터베이스'는 생각하기 나름이라 '설계'라고 함 => 더 효율적이거나 비효율적이거나
PK(primary key : 기본키)
FK(foreign key : 외래키)