diff --git a/1week.md b/1week.md deleted file mode 100644 index 1d4d361..0000000 --- a/1week.md +++ /dev/null @@ -1,15 +0,0 @@ -# 모던 자바스크립트 딥 다이브 3개월 완독 프로젝트 -목적: JS를 기초부터 차근차근 익힌다. - -책 링크: http://www.yes24.com/Product/Goods/92742567 - -기간: 5.10(월) ~ 8.1(일) 총 84일 -# 규칙 -1. 오픈 채팅방 주도 진행 [주소](https://open.kakao.com/o/gXNDEfcd) -1. 4~49 챕터(총 46)를 진행합니다. -2. 한 달 4주, 약 28일, 총 12주, 84일이므로 한 주에 4~6 챕터를 진행합니다. 그전 주에 [카톡 오픈 채팅방](https://open.kakao.com/o/gXNDEfcd)에서 투표합니다. (기본값-4챕터) -3. 온라인 위주로 활동합니다. -4. 각 주차별/닉네임 폴더 아래에 그 주에 공부한 내용을 정리해 PR로 공유합니다. -5. branch 명명 규칙: 닉네임-n(주 차). 예: qkreltms-1 또는 qkreltms-week1, main을 바라보고 branch를 생성합니다. -5. 자유롭게 PR을 리뷰하고 main에 병합합니다. -6. **중요!!: 그 주에 올린 PR을 캡처하고 챌린저스에 인증합니다.** diff --git "a/1\354\243\274\354\260\250 / sunghyun/1week.md" "b/1\354\243\274\354\260\250 / sunghyun/1week.md" new file mode 100644 index 0000000..6e20ea8 --- /dev/null +++ "b/1\354\243\274\354\260\250 / sunghyun/1week.md" @@ -0,0 +1,97 @@ +# 04. 변수 + +변수는 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념이다. 컴퓨터는 사람을 모델로 디자인되었기 때문에 사람과 유사하게 동작한다고 생각할 수 있다. + +```js +// javascript code +10 + 20; +``` + +- 사람 : `10`과 `20`을 더한 결과인 30을 두뇌에 기억한다. +- 컴퓨터(자바스크립트 엔진) : 코드를 계산하려면 `10`, `20`, `+`라는 기호의 의미를 알고 있어야 하며 `10+20`이라는 식의 의미도 해석할 수 있어야 한다. + +사람은 계산과 기억을 두뇌에서 하지만, 컴퓨터는 연산과 기억을 수행하는 부품이 나눠져 있다. 컴퓨터는 CPU를 사용해 연산을 하고, 메모리를 사용해서 데이터를 기억한다. + +## 메모리 + +메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체이다. 셀 하나의 크기는 1바이트(8비트)이다. 위의 예시 코드에서 `10`과 `20`은 메모리에 저장되고 CPU는 이 값을 읽어 연산을 수행한다. 결과 `30` 값 또한 메모리 주소에 저장된다. 메모리에 저장되는 모든 값은 2진수로 저장된다. + +## 변수 + +자바스크립트는 개발자의 직접적인 메모리 제어를 허용하지 않는다. **WHY ?** 메모리 주소는 코드가 실행될 때 임의로 결정되기 때문에 코드가 실행될 때마다 메모리 주소는 변경된다. **HOW ?** 메모리를 직접 제어하는 것이 아닌, 변수라는 메커니즘을 통해서 메모리 주소를 식별할 수 있도록 이름을 지정하면 된다. **변수는 프로그래밍 언어의 컴파일러 또는 인터프리터**에 의해 값이 저장된 메모리 공간의 주소로 치환되어 실행된다. **즉, 개발자가 직접 메모리 주소를 통해 값을 저장하고 참조할 필요가 없고 `변수`를 통해 안전하게 값에 접근할 수 있는 것이다.** + +- 변수 이름을 식별자라고도 한다. +- 식별자는 값이 아니라 메모리주소를 기억하고 있다. +- 식별자로 값을 구분한다는 것은 식별자가 기억하고 있는 메모리 주소를 통해 메모리 공간에 저장된 값에 접근할 수 있다는 의미이다. +- 즉, 식별자는 메모리 주소에 붙인 이름 + +## 변수 선언 + +변수 선언이란 변수를 생성하는 것을 말한다. `var`, `let`, `const` 키워드를 통해 선언할 수 있다. + +- `var` : 함수 레벨 스코프 +- `let`, `const` : 블록 레벨 스코프 +- ES6에서 도입된 `let`, `const` 키워드를 지향하자. +- `var` 스코프는 함수의 스코프만을 지역 스코프로 인정한다. 따라서, 코드 블록 내에 선언해도 전역 변수가 되는 문제점이 있다. + +자바스크립트 엔진은 변수 선언을 다음과 같은 2단계에 거쳐 수행한다. + +```js +var score; // 변수 선언(변수 선언문) +``` + +- 선언 : 변수 이름을 등록해서 엔진에 변수의 존재를 알림 +- 초기화 : 값을 저장하기 위한 공간을 확보하고 암묵적으로 `undefined`를 할당해 초기화 + +자바크립트 엔진은 소스를 평가하고 실행하는 두 가지 과정으로 일을 한다. + +- 평가 : 변수 선언을 포함한 모든 선언문을 코드에서 찾아내 먼저 실행함 +- 실행 : 순차적으로 다음 코드를 진행 + +자바스크립트 엔진은 코드를 실행하기 전에 이미 모든 식별자 정보를 알고 있는 셈이다. 이를 호이스팅이라고 부른다. + +# 05. 표현식과 문 + +- 표현식 : 값으로 평가될 수 있는 문이다. +- 문 : 프로그램을 구성하는 기본 단위이자 최소 실행 단위 + - 문은 여러 토큰으로 구성된다. + - 문은 컴퓨터에 내리는 명령이라고 생각하면 된다. + +```js +// 변수 선언문 +var x; +// 할당문 +x = 5; +// 함수 선언문 +function foo() {} +// 조건문 +if (x > 1) { + console.log(x); +} +// 반복문 +for (var i = 0; i < 2; i++) { + console.log(i); +} +``` + +# 06. 데이터 타입 + +- 원시 타입 + - Number + - String + - Boolean + - Undefined + - Null + - Symbol +- 객체 타입 + - Object + - Function + - Array + +데이터 타입은 왜 필요한 것인가? + +- 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다. 따라서, 공간의 확보와 메모리 간의 참조를 위해 데이터 타입을 결정하는 것이다. **자바스크립트 변수는 선언이 아닌, 할당에 의해 타입이 결정된다. 또한 재할당을 통해 언제든지 동적으로 변할 수 있다.** 자바스크립트를 동적 타입 언어라고 부르는 이유이기도 하다. + +# 07. 연산자 + +하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리 지수 연상 등을 수행해서 하나의 값을 만든다. 동등 연산자를 지양하고 일치 비교 연산자를 지향하자. diff --git "a/1\354\243\274\354\260\250/qkreltms/index.md" "b/1\354\243\274\354\260\250/qkreltms/index.md" deleted file mode 100644 index 21c832a..0000000 --- "a/1\354\243\274\354\260\250/qkreltms/index.md" +++ /dev/null @@ -1,3 +0,0 @@ -# 1주차 리뷰 - -# 배운 것 \ No newline at end of file diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..47ae7ba --- /dev/null +++ b/README.MD @@ -0,0 +1,18 @@ +# 모던 자바스크립트 딥 다이브 3개월 완독 프로젝트 + +목적: JS를 기초부터 차근차근 익힌다. + +책 링크: http://www.yes24.com/Product/Goods/92742567 + +기간: 5.10(월) ~ 8.1(일) 총 84일 + +# 규칙 + +1. 오픈 채팅방 주도 진행 [주소](https://open.kakao.com/o/gXNDEfcd) +1. 4~49 챕터(총 46)를 진행합니다. +1. 한 달 4주, 약 28일, 총 12주, 84일이므로 한 주에 4~6 챕터를 진행합니다. 그전 주에 [카톡 오픈 채팅방](https://open.kakao.com/o/gXNDEfcd)에서 투표합니다. (기본값-4챕터) +1. 온라인 위주로 활동합니다. +1. 각 주차별/닉네임 폴더 아래에 그 주에 공부한 내용을 정리해 PR로 공유합니다. +1. branch 명명 규칙: 닉네임-n(주 차). 예: qkreltms-1 또는 qkreltms-week1, main을 바라보고 branch를 생성합니다. +1. 자유롭게 PR을 리뷰하고 main에 병합합니다. +1. **중요!!: 그 주에 올린 PR을 캡처하고 챌린저스에 인증합니다.**