딥다이브 day1 (4 ~ 6)

kdev·2022년 6월 29일
0
post-thumbnail

4장 (변수란 무엇인가?)

  • 컴퓨터는 CPU를 사용해 연산하고 메모리를 사용해 데이터를 기억한다.
  • 메모리
    1. 데이터를 저장할 수 있는 메모리 셀의 집합체
    2. 메모리 셀의 크기는 1바이트(7비트)이며, 컴퓨터는 메모리 셀의 크기, 즉 1바이트 단위로 데이터를 저장하거나 읽는다.
    3. 각 셀은 고유의 메모리 주소를 갖고, 이는 메모리 공간의 위치를 나타내며 0부터 시작해서 메모리의 크기만큼 정수로 표현된다.
    4. 컴퓨터는 모든 데이터를 2진수로 처리하기에 데이터의 종류와 상관없이 모두 2진수로 저장된다.
    5. 연산의 결과 값으로 얻어진 데이터를 재사용하기 위해서는 메모리 공간에 직접 접근하는 방법 밖에 없는데, 이는 운영체제가 사용하고 있는 값을 변경하게 되므로 치명적인 오류가 발생할 수 있다. 따라서, 자바스크립트는 직접접인 메모리 제어를 허용하지 않으며, 재사용하기 위해서는 메모리에 저장된 값을 읽어 들여 변수에 할당하여 사용한다.
  • 변수
    1. 하나의 값을 저장하기 위해 확보한 메모리공간 자체 or 메모리 공간을 식별하기 위해 붙인 이름
    2. 값의 위치를 가리키는 상징적인 이름
    3. 변수를 사용하여 메모리에 있는 데이터에 안전하게 접근할 수 있다.
    4. 변수에 값을 저장하는 행위를 할당이라하고, 변수에 저장된 값을 읽어들이는 것을 참조라고 한다.
  • 식별자
    1. 어떤 값을 구별해서 식별할 수 있는 고유한 이름 = 변수, 함수, 클래스 등등
    2. 식별자는 값이 아니라 메모리의 주소를 기억한다.
    3. 변수, 함수, 클래스 등의 이름과 같은 식별자는 네이밍 규칙을 준수해야 하며, 선언에 의해 자바스크립트 엔진에 식별자의 존재를 알려야한다.
  • 변수 선언
    1. 변수를 생성하는 것
    2. 값을 저장하기 위해 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것
    3. 변수 선언에 의해 확보된 메모리 공간은 확보가 해제되기 전까지는 누구도 확보된 메모리 공간을 사용할 수 없도록 보호되므로 안전하다.
    4. 변수 선언은 var, let, const 를 이용하여 선언한다.
    5. var, let, const 차이
      1. var : 함수레벨 스코프, 변경 가능
      2. let : 블록레벨 스코프, 변경 가능
      3. const : 블록레벨 스코프, 변경 불가능
    6. ES6는 기본적으로 하위 호환성을 유지하면서 ES5의 기반 위에 새로운 기능을 추가한 것, ES6는 ES5의 상위 집합이다.
    7. 자바스크립트에서는 변수를 선언한 이후 값을 할당하지 않았을 때, 자바스크립트 엔진은 undefined라는 값을 암묵적으로 할당하여 초기화한다.
    8. 자바스크립트 엔진의 변수 선언 단계
      1. 선언 단계: 변수 이름을 등록하여 자바스크립트 엔진에 변수의 존재를 알림
      2. 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 변수의 값을 할당하지 않을 시 암묵적으로 undefined를 할당하여 초기화 한다.
    9. 실행 컨텍스트
      1. 모든 식별자는 실행 컨텍스트에 등록된다.
      2. 실행 컨텍스트는 자바스크립트 엔진이 소스코드를 평가하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역
      3. 자바스크립트 엔진은 실행 컨텍스트를 통해 식별자와 스코프를 관리한다
    10. 참조 에러
      1. 선언하지 않은 식별자에 접근하였을 때 발생하는 에러
      2. 자바스크립ㅌ 엔진이 등록된 식별자를 찾을 수 없을 때 발생
    11. 변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 실행되지만, 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.
  • 변수 재할당
    1. 이미 값이 할당되어 있는 변수에 새로운 값을 할당하는 것
    2. 값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아니라 상수라 한다.
      1. 상수는 한번 정해지면 변하지 않는 값이다.
      2. const 로 선언된 변수는 상수를 표현한다
      3. 다만 const 키워드는 반드시 상수만을 위해 사용하지 않는다.
  • 가비지 콜렉터
    1. 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능
    2. 더 이상 사용되지 않는 메모리 = 어떤 식별자도 참조하지 않는 메모리 공간
    3. 메모리 누수를 방지
    4. 단, 메모리에서 언제 해제될지는 예측할 수 없다.
    5. 가비지 콜렉터를 내장하는 언어를 매니지드 언어라 한다.
  • 네이밍 규칙
    1. 식별자는 특수문자를 제외한 문자, 숫자, 언더스코어, 달러 기호를 포함할 수 있다.

    2. 식별자는 특수문자를 제외한 문자, 언더스코어, 달러 기호로 시작해야 하며, 숫자는 허용하지 않는다.

    3. 예약어는 식별자로 사용할 수 없다.

      자바스크립트 예약어

  • ES5부터 식별자를 만들 때 유니코드 문자를 허용하므로 한글이나 일본어 식별!
    자도 사용할 수 있지만, 유니코드 문자로 명명된 식별자를 사용하는 것은 권장하지 않는다.
  • 네이밍 컨벤션
    1. 자바스크립트에서는 일반적으로 변수나 함수의 이름에는 카멜케이스를 사용하고,
      생성장 함수, 클래스의 이름에는 파스칼 케이스를 사용한다.
    2. firstName = CamelCase
    3. first_name = snake_case
    4. FirstName = PascalCase
    5. typeHungarianCase = type + identifier
      1. strFirstName

5장 (표현식과 문)

    • 값은 식이 평가되어 생성된 결과
    • 평가 = 식을 해석하여 값을 생성하거나 참조하는 것
    • 모든 값은 데이터 타입을 가지며, 메모리에 2진수, 비트의 나열로 저장된다.
  • 리터럴
    • 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용하여 값을 생성하는 표기법
    • 자바스크립트 엔진은 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성한다.
  • 표현식
    • 값으로 평가될 수 있는 문이다.
    • 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
    • 프로그램을 구성하는 기본 단위이자 최소 실행단위
    • 프로그램은 문의 집합으로 이루어지며, 프로그래밍은 순서에 맞게 문을 나열한 것
    • 문은 여러 토큰으로 구성된다
      • 토큰이란 문법적인 의미를 가지며, 문접적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.
    • 문은 컴퓨터에 내리는 명령
  • 세미콜론과 세미콜론 자동 삽입 기능
    • 자바스크립트는 세미콜론으로 문이 종료한 위치를 파악하고 순차적으로 하나씩 문을 싱행한다.
    • if, for, 함수 등의 코드 블록은 자체 종결성를 갖기에 세미콜론을 붙이지 않는다.
    • 자바스크립트 엔진을 통해 문의 끝이라고 예측되는 지점에 세미콜론 자동 삽입 기능을 통해 세미콜론을 자동으로 생성하기에 생략가능하다,

6장 (데이터 타입)

  • 자바스크립트의 모든 값은 데이터 타입을 갖는다.
  • ES6는 7개의 데이터 타입을 제공한다.

  • 숫자 타입
    - C나 자바의 경우 int, long, float, double 같은 다양한 숫자 타입을 제공하지만, 자바스크립트는 하나의 숫자 타입만 존재한다.
    - 자바스크립트는 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입이 없다.
    - 정수로 표시되는 수끼리 나눗셈을 진행하면 실수가 나올 수 있다.
    - 세 가지의 특별한 값도 표현 할 수 있다
    - 양의 무한대
    - 음의 무한대
    - 산술 연산 불가 = NaN
    • 템플릿 리터럴
      • ES6부터 도입된 새로운 문자열 표기법
      • 백틱을 사용하여 표현한다.
      • 멀티라인 문자열, 표현식 삽입, 태그드 탬플릿 등 문자열 처리 기능 제공
      • 이스케이프 시퀀스

  • null 타입
    - 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미
  • 심벌 타입
    - ES6에서 추가된 타입
    - 변경 불가능한 원시 타입의 값
    - 다른 값과 중복되지 않는 유일무이한 값
    - 주로 이름이 출돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
    - 심벌 이외의 원시 값은 리터럴을 통해 생성하지만, 심벌은 Symbol 함수를 호출하여 생성한다.
    - 심벌 값은 외부에 누출되지 않으며, 다른 값과 절대 중복되지 않는다
  • 데이터 타입의 필요성
    - 데이터 타입에 의한 메모리 공간의 확보와 참조를 위해
  • 심벌 테이블
    - 컴파일러 또는 인터프리터는 심벌 테이블이라고 부르는 자료 구조를 통해 식별자를 키로 바인딩된 값의 메모리 주소, 데이터 타입, 스코프 등을 관리한다.
  • 동적 타입 언어 / 정적 타입 언어
    - 정적 타입 언어란 사전에 선언된 데이터 타입을 변경 할 수 없다. ex) C - char, double
    - 동적 타입 언어란 사전에 선언된 데이터 타입을 변경 할 수 있다. ex) Javascript - var, let
    - 자바스크립트의 변수는 선언이 아닌 할당 or 재할당에 의해 타입이 결정된다.
    - 동적 타입 언어는 유연성은 높지만 신뢰성이 떨어진다.

0개의 댓글