언어/JavaScript

[자바스크립트 딥다이브] 5장 표현식과 문, 6장 데이터 타입

홍시_코딩기록 2024. 3. 29. 00:48

5장 표현식과 문

1. 값

  • 표현식이 평가되어 생성된 결과
    • 평가: 식을 해석해서 값을 생성하거나 참조하는 것을 의미
10 + 20 //30

//10 + 20 은 평가되어 숫자 값 30을 생성

 

2. 리터럴

  • 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법
//숫자 리터럴 3
3

  • 리터럴은 문자(숫자, 알바벳, 한글 등) 또는 기호(’’, “”, // 등) 로 표기한 코드
  • 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성 즉, 리터럴은 값을 생성하기 위해 미리 약속된 표기법
  • 숫자 리터럴 3을 코드에 기술하면 자바스크립트 엔진은 이를 평가해 숫자 값 3을 생성한다.

3. 표현식

  • 표현식은 값으로 평가될 수 있는 문. 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조
  • 리터럴은 값으로 평가되서 리터럴도 표현식임.
//표현식 예
var score = 100;
var score = 50 + 50;
score; //100
  • 표현식은 리터럴, 식별자, 연산자, 함수 호출 등의 조합으로 이뤄질 수 있다.
  • 값으로 평가될 수 있는 문은 모두 표현식.

4. 문

  • 문은 프로그램을 구성하는 기본 단위이자 최소 실행 단위
  • 문은 여러 토큰으로 구성된다. 토큰이란 문법적인 의미를 가지며 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소

 

5. 세미콜론과 세미콜론 자동삽입 기능

  • 문을 끝낼 때는 세미콜론을 붙여야 하지만 코드 블록 ( { … } )뒤에는 붙이지 않음.

 

6. 표현식인 문과 표현식이 아닌 문

//변수 선언문은 값으로 평가될 수 없으므로 표현식이 아님
var x;

// 표현식이면서 완전한 문
x = 1 + 2;
  • 표현식인 문 : 값으로 평가될 수 있는 문
  • 표현식X 문 : 값으로 평가될 수 없는 문
  • 구별하는 가장 간단한 방법 : 변수에 할당해보기
//표현식이 아닌 문은 값처럼 사용할 수 없음.
var foo = var x;

 

 

6장 데이터 타입

 

 

구분 데이터 타입 설명

원시타입 숫자 타입 숫자, 정수와 실수 구분없이 하나의 숫자 타입만 존재
  문자열 타입 문자열
  불리언 타입 참과 거짓 (true, false)
  undefined 타입 var 키워드로 선언된 변수에 암묵적으로 할당되는 값
  null 타입 값이 없다는 것을 의도적으로 명시할 때 사용하는 값
  심벌symbol 타입 es6에서 추가된 7번째 타입
객체타입   객체, 함수, 배열 등

 

1. 숫자 타입

  • 자바스크립트는 하나의 숫자 타입만 존재함.
// 모두 숫자 타입
var integer = 10;
var double = 10.12;
var negative = -20;

var binary = 0b01000001; //2진수
console.log(binary) //65

console.log(1 === 1.0); // true 사실 숫자 타입은 모두 실수로 처리됨 ><

//숫자 타입의 세가지 특별한 값
console.log(10 / 0); //infinity
console.log(10 / -0); //-infinity
ocnsole.log(1 * 'string'); //NaN
  • 자바스크립트는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문에 값을 참조하면 모두 10진수로 해석
  •  

2. 문자열 타입

  • 가장 일반적으론 작은따옴표를 사용함.
  •  

3. 템플릿 리터럴

  • 백틱(``)을 사용해 표현함.
var str = `h
ell
o`;
  • 백택을 사용하면 문자열 내에서 줄바꿈이 가능함.
  • 백틱 안에서 표현식 사용할 수 있어서 유용
  •  

4. 불리언 타입

  • true false

 

5. undefined 타입

  • var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화 됨.
  • 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값

 

6. null 타입

  • 변수에 값이 없다는 것을 의도적으로 명시할 때 사용
  • 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함.

 

7. 심벌 타입

  • 변경 불가능한 원시 타입의 값, 다른 값과 중복 되지 않는 유일무이한 값
//심벌 값 생성
var key = Symbol('key');
console.log(typeof key); //symbol

//객체 생성
var obj = {};

//이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용
obj[key] = 'value';
console.log(obj[key]); //value

 

8. 객체 타입

  • 6가지 데이터 타입 이외의 값은 모드 객체타입

 

데이터 타입은 왜 필요할까??

  1. 데이터 타입에 의한 메모리 공간의 확보와 참조
    • 메모리에 값을 저장하려면 몇 바이트의 메모리 공간을 사용해야 낭비와 손실 없이 값을 저장할 수 있는지 알아야 함.
    var score = 100;
    
    • 숫자 값 100을 저장하기 위해 메모리 공간을 확보한 다음, 확보된 메모리에 숫자 값 100을 2진수로 저장함.
    • 이런 처리를 하려면 숫자 값을 저장할 때 확보해야 할 메모리 공간의 크기를 알아야함.
    • 자바스크립트는 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정됨.

 


    • 식별자 score를 통해 숫자 타입의 값 100이 저장되어 있는 메모리 공간의 주소를 찾아갈 수 있음.
    • 이 때 값을 참조하려면 한 번에 읽어 들여야 할 메모리 공간의 크기, 즉 메모리 셀의 개수(바이트 수)를 알아야 함.
    • 자바스크립트는 score 변수를 숫자 타입으로 인식. 숫자 타입은 8바이트 단위로 저장되므로 score 변수를 참조하면 8바이트 단위로 메모리 공간에 저장된 값을 읽어들임
    •  
  1. 데이터 타입에 의한 값의 해석
  • 데이터 타입이 필요한 이유
  1. 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
  2. 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
  3. 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

 

동적 타이핑

  1. 동적 타입 언어와 정적 타입 언어
    • 정적 타입 언어 (C나 자바)는 변수의 타입을 변경할 수 없고 타입에 맞는 값만 할당 가능함.
    • 자바스크립트는 변수를 선언할 때 타입을 선언하지 않아서 어떠한 타입의 값을 자유롭게 할당.
    • 재할당에 의해서 변수의 타입은 언제든지 동적으로 변할 수 있음. = 동적 타이핑
  2. 동적 타입 언어와 변수
    • 동적타입 언어는 유연성은 높지만 신뢰성은 떨어짐. 그래서 요즘은 타입스크립트 많이 사용.
    • 변수 사용 시 주의사항
      • 변수는 꼭 필요한 경우에 한해 제한적으로 사용.
      • 변수의 유효 범위(스코프)는 최대한 좁게 만들어서 변수의 부작용 억제
      • 전역 변수는 최대한 사용하지 않도록 함.
      • 변수보다는 상수를 사용해 값의 변경을 억제
      • 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍.
    • 가독성이 좋은 코드가 좋은 코드