탱구탱구 개발자 일기

1. 데이터 타입

  • 정의 : 숫자나 문자열처럼 변수에 저장하는 데이터 종류
  • 유형
    • 정적 타입 언어 : 정수, 부동소수점 타입 등 이미 정해진 변수 타입이 존재, C, Java 등
    • 동적 타입 언어 : 정해진 타입 없이 실행할 때 변수에 저장된 데이터 타입을 동적으로 바꿈

2. 자바스크립트 데이터 타입 분류

  • 원시 타입(Primitive Type)
    • 숫자 : 정수, 부동소수점 구분없이 64비트 부동소수점으로 표현(c, java의 double type)
    • 문자열 : 길이 16비트 유니코드 문자(UTF-16)를 나열
    • 논리값 : 조건식이 참인지 거짓인지 표현, true, false
    • 특수한 값(undefined, null)
      • undefined : 코드로 undefined를 대입한 것이 아니라 자바스크립트 엔진이 변수를 undefined로 초기화!
        • 값을 아직 할당하지 않은 변수의 값
        • 없는 객체의 프로퍼티를 읽으려고 시도했을 때의 값
        • 없는 배열의 요소를 읽으려고 시도했을 때의 값
        • 아무것도 반환하지 않는 함수가 반환하는 값
        • 함수를 호출했을 때 전달받지 못한 인수의 값
      • null : 아무것도 없음을 값으로 표현한 리터럴
    • 심벌(Symbol()) : 자기 자신을 제외한 그 어떤 값과도 다른 유일무이한 값
let symbol1 = Symbol();
let symbol2 = Symbol();

console.log(symbol1 == symbol2); // false

let symbol3 = Symbol('사랑');
console.log(symbol3.toString()); // Symbol(사랑)

 

심벌을 사용하면 특정 값의 상태를 표현하는 데 제한을 둘 수 있다.

// 오셀로 게임 -> 칸의 상태를 값으로 표현할 때
let none = 0; // 칸에 돌이 놓여 있지 않은 상태
let black = -1; // 칸에 흑돌이 놓여 있는 상태
let white = 1; // 칸에 백돌이 놓여 있는 상태

// 칸의 상태를 cell 변수에 저장할 때 위의 코드의 경우 아래와 같이 두 코드로 작성했을 경우
// 프로그램이 모두 동작할 수 있다.
// 그러나 프로그램 읽는데 혼동이 올 수 있다.
let cell;
cell == white;
cell == 1;

// 심벌을 사용하면 변수명만을 이용해서 상태를 구분할 수 있다.
let none = Symbol('none');
let black = Symbol('black');
let white = Symbol('white');

 

[심벌과 문자열 연결]

Symbol.for()를 활용하면 문자열과 연결된 심벌을 생성할 수 있다.

이렇게 심벌을 생성할 경우 전역 레지스트리에 심벌이 생성된다. 따라서 프로그램 전체에서 같은 심벌을 공유할 수 있다.

또한 Symbol.keyFor()을 사용해 심벌과 연결된 문자열을 구할 수 있다.

let sym1 = Symbol.for('love');
let sym2 = Symbol.for('love');
console.log(sym1 == sym2); // true

let sym3 = Symbol('love');
console.log(Symbol.keyFor(sym1)); // love
console.log(Symbol.keyFor(sym3)); // undefined

 

  • 객체 타입
    • 원시 타입에 속하지 않은 자바스크립트의 값은 객체라고 함
    • 객체는 변수 여러 개가 모여서 만들어진 복합 데이터 타입
    • 객체는 참조 타입이고 객체 타입의 값을 변수에 대입하면 변수에는 그 객체에 대한 참조가 할당

 

3. 템플릿 리터럴 : ECMAScript 6부터 추가된 문자열 표현 구문

// 템플릿 리터럴

// 기본적인 사용법 : 역따옴표(`)로 묶은 문자열

let t1 = `I'm a IronMan`;

let t2 = `I'm a
            IronMan`;

let t3 = String.raw`I'm a \n IronMan`;

console.log('t1:', t1); //t1: I'm a IronMan
console.log('t2:', t2); //t2: I'm a (\n) IronMan =>줄바꿈 이스케이프 시퀀스 쓴 것 처럼 출력 
console.log('t3:', t3); //t3: I'm a \n IronMan => 이스케이프 시퀀스 문자를 그대로 출력할 때

보간 표현식의 경우 그동안 변수나, 표현식의 결과값을 문자열로 연결할 때 '+'를 사용해야 했는데 이러한 부분에서 보다 쉽게 표현할 수 있어서 유용하다. 

// 보간 표현식
// 템플릿 리터럴 안에 플레이스 홀더를 사용. 
// 플레이스 홀더 ${...} => ... 부분을 표현식으로 간주해 평가한다
// 즉 변수나, 표현식의 결괏값 삽입 가능

let a = 2, b= 3;
console.log(`${a} + ${b} = ${a+b}`); // 2 + 3 = 5

let today = new Date();
console.log(`오늘은 ${today.getFullYear()}년 ${today.getMonth()+1}월 ${today.getDate()}일 입니다.`);
// 오늘은 2020년 8월 17일 입니다.

 

 

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band
loading