Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions 1week.md

This file was deleted.

97 changes: 97 additions & 0 deletions 1주차 / sunghyun/1week.md
Original file line number Diff line number Diff line change
@@ -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. 연산자

하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리 지수 연상 등을 수행해서 하나의 값을 만든다. 동등 연산자를 지양하고 일치 비교 연산자를 지향하자.
3 changes: 0 additions & 3 deletions 1주차/qkreltms/index.md

This file was deleted.

18 changes: 18 additions & 0 deletions README.MD
Original file line number Diff line number Diff line change
@@ -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을 캡처하고 챌린저스에 인증합니다.**