[모딥다] 06장.데이터 타입

vanLan·2026년 1월 20일

모딥다

목록 보기
2/11
post-thumbnail

자바스크립트(ES6)는 7개의 데이터 타입을 제공
7개의 데이터 타입은 원시 타입과 객체 타입으로 분류 가능

📁원시타입

🗒️숫자 타입

  • 모든 수를 실수 처리, 정수만 표현하기 위한 데이터 타입 별도 존재 X
  • 정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 2진수로 저장 -> 값 참조시 모두 10진수로 해석
  • 정수로 표시된다 해도 실수
  • 정수로 표시되는 수끼리 나누더라도 실수가 나올 수 있음
  • 추가적으로 세 가지 특별한 값도 표현 가능
    • Infinity: 양의 무한대
    • -Infinity: 음의 무한대
    • NaN: 산술 연산 불가(not-a-number)
var binary = 0b01000001;  // 2진수
var octal = 0o101;  // 8진수
var hex = 0x41;  // 16진수

// 표기법만 다를 뿐 모두 같은 값
console.log(binary);  // 65
console.log(octal);  //65
console.log(hex);  // 65
console.log(binary === octal);  // true
console.log(octal === hex);  // true

// 숫자 타입은 모두 실수 처리
console.log(1 === 1.0)  // true
console.log(4 / 2);  // 2
console.log(3 / 2);  // 1.5

// 숫자 타입의 세가지 특별한 값
console.log(10 / 0);  // Infinity
console.log(10 / -0);  // -Infinity
console.log(1 * 'String');  // NaN

🗒️문자열 타입

  • 문자열은 0개 이상의 16비트 유니코드 문자(UTF-16)의 집합으로 전 세계 대부분의 문자 표현 가능
  • 작은따옴표(' '), 큰따옴표(" ") 또는 백틱(``)으로 텍스트를 감싸 표현
  • 자바스크립트의 문자열은 변경 불가능한 값임
// 문자열 타입
var string;
string = '문자열';  // 작은따옴표
string = "문자열";  // 큰따옴표
string = `문자열`;  // 백틱

string = '작은따옴표로 감싼 문자열 내의 "큰따옴표"는 문자열로 인식';
string = "큰따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식";

🗒️템플릿 리터럴

  • 템플릿 리터럴은 일반 문자열과 비슷해 보이지만 백틱(``)을 사용해 표현
  • 멀티라인 문자열
    • 일반 문자열 내
      • 줄바꿈(개행)이 허용되지 않음

        var str = 'Hello
         word.';
         // SyntaxError: Invalid or unexpected token
        
         // 이스케이프 시퀀스 사용
         var template = '<ul>\n\t<li><a href="#">Home</a></li>\n</ul>';
      • 템플릿 리터럴

        var template = `<ul>
           <li><a href="#">Home</a></li>
         </ul>
         `
  • 표현식 삽입
    • '+'를 사용해 문자열을 연결 할 수 있음

    • ${ }으로 표현식을 감싸면 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제로 변환되어 삽입

      var first = 'Ung-mo';
      var last = 'Lee';
      
      // 문자열 연결
      console.log('My name is ' + first + ' ' + last + '.');  // My name is Ung-mo Lee.
      
      // 표현식 삽입
      console.log(`My name is ${first} ${last}`);  // My name is Ung-mo Lee.

🗒️불리언 타입

  • 논리적 참, 거짓을 나타내는 truefalse

    var foo = true;
    console.log(foo);  // true
    
    foo = false;
    console.log(foo);  // false

🗒️undefined 타입

  • undefined 타입의 값은 undefined가 유일
  • 변수에 값이 없다는 것을 명시하고 싶다면, undefined 보단 null을 사용
    var foo;
    console.log(foo);  // undefined

🗒️null 타입

  • null 타입의 값은 null이 유일
  • 값이 없다는 것을 의도적으로 명시할 때 사용
    var foo = 'Lee';
    foo = null;

🗒️심벌 타입

  • 변경 불가능한 원시 타입의 값
  • 다른 값과 중복되지 않는 유일무이한 값. 객체의 유일한 프로퍼티 키를 만들기 위해 사용됨
  • Symbol 함수를 호출해 생성 -> 생성된 심벌 값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key);  // symbol

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

// 심벌을 프로퍼티 키로 사용
obj[key] = 'value';
console.log(obj[key]);  // value

📁객체 타입

  • JS는 객체 기반의 언어이며, JS를 이루고 있는 거의 모든 것이 객체임
  • 원시 타입 이외의 값은 모두 객체 타입

📁데이터 타입의 필요성

  • 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
  • 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

📁 동적 타이핑

  • 선언이 아닌 할당: 변수 선언 시점이 아닌, 값 할당 시 타입 결정
  • 동적인 재할당: 재할당을 통해 언제든 타입 변경 가능 (유연성 확보)
  • 한계와 대안 (TS):
    • 높은 유연성 ↔ 런타임 에러 위험성 증가
    • Solution: TypeScript 활용 (개발 환경에서 타입 추론 및 에러 방지)
profile
프론트엔드 개발자를 꿈꾸는 이

0개의 댓글