TIL : 데이터타입

hihyeon_cho·2023년 1월 30일
0

TIL

목록 보기
60/101
post-thumbnail

데이터타입

💡 데이터 타입 = 값의 종류

자바스크립트의 모든 값은 데이터타입을 가지고 있으며, 총 7개의 데이터 타입을 가지고 있다.

원시타입

number

  • 숫자 타입
  • 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터타입이 별도로 존재하지 않음. 그러므로, 정수로 표시한다해도 실수로 처리됨.
    ( C나 자바는 정수와 실수를 구분해서 타입제공. )
  • 2진수, 8진수, 16진수를 표현하기 위한 데이터타입을 제공하지 않기 때문에 모두 10진수로 해석된다.
  • 특별한 값을 표현할 수 있다.
    • Infinity : 양의 무한대
    • -Infinity : 음의 무한대
    • NaN(Not a Number) : 산술연산 불가 ( 대소문자 구별하기. 값이 아닌 식별자로 해석되기 때문 )

string

  • 문자열 타입

  • 작은따옴표(’’), 큰따옴표(””), 백틱(``)으로 텍스트를 감싸며, 일반적으로 작은 따옴표를 사용.

  • 문자열을 따옴표로 감싸는 이유는 키워드나 식별자같은 토큰과 구분하기 위해서. ( 안 감싸면 토큰으로 인식함. )

  • 문자열이 생성되면 그 문자열을 변경할 수 없다 (원시타입이며 변경불가능한 값이라.)

  • 템플릿리터럴

    • ES6부터 도입된 새로운 문자열 표기법.
      템플릿 리터럴은 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리기능을 제공.
    • 멀티라인 문자열 : 일반 문자열 내에서는 줄바꿈이 허용되지 않아 줄바꿈 등의 공백을 표현하려면 이스케이프 시퀀스를 사용해야하지만, 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 적용된다.
    • 표현식삽입 : 문자열은 문자열 연산자 ‘+’ 를 이용해 연결하는데, 템플릿 리터럴에서는 표현식을 ${} 로 감싸서 표현할 수 있다.
    • 태그드 템플릿 : 함수에 템플릿 리터럴을 전달하는 방법.
      호출된 함수는 템플릿 리터널 내 문자열 조각이나 표현식 등을 매개변수로 받는다. styled-components에서 사용되는 방식도 태그드 템플릿이다. ( 참고 : https://choonse.com/tag/태그드-템플릿/ )
      const name = '라이언';
      const city = '서울';
      const showString = (text, ...args) => {
          console.log(text);// ['나는 ','이고,','에 살아요.']
          console.log(args);// ['라이언','서울']
          console.log(text[2]); //에 살아요.
          console.log(args[1]); //서울
      }
      showString`나는 ${name}이고, ${city}에 살아요.`;

boolean

: 논리적 참,거짓을 나타내는 true / false

undefined

  • 정의되지 않은 값. ( 변수에 값을 할당하여 변수의 실체를 명확히 하지 않은 값 )
  • 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값.
    변수선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질 때까지 빈상태로 내버려두지 않고, 자바스크립트가 undefined로 초기화한다.
  • var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화 된다. → var키워드로 선언된 변수에 암묵적으로 할당되는 값.
  • 변수를 선언한 이후 값을 할당하지 않은 변수를 참조하면 undefined가 반환된다.

null

  • 값이 없다는 것을 의도적으로 명시할 때 사용하는 값
  • 변수에 null 을 할당한다 = 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다. =이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미. = 자바스크립트 엔진은 참조하지 않는 이 메모리공간에 가비지콜렉션을 수행.
  • 함수가 유효한 값을 반환할 수 없는 경우에도 명시적으로 null을 반환한다.

symbol

  • ES6에서 추가된 7번째 타입.
  • 다른 값과 중복되지 않는 유일무이한 값. 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.
  • Symbol 함수를 호출해 생성한다.
    var key = Symbor('key')
    console.log( typeof key ); //symbol
    
    //객체 생성
    var obj = {};
    
    //이름이 충돌할 위험이 없는 유일무이한 값인 symbol을 프로퍼티 키로 사용한다.
    obj[key] = 'value';
    console.log(obj[key]); //value

객체타입

  • 앞의 6가지 데이터타입을 제외한 객체, 함수, 배열 모두 객체타입.
  • 자바스크립트는 객체기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것이 객체이다.

데이터타입의 필요성

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

동적타이핑

정적타입언어 ( ex. C, C++, 자바 등...)

  • 변수 선언시점에 변수의 타입이 결정되고 변수의 타입을 변경할 수 없으며, 선언한 타입에 맞는 값만 할당할 수 있다.
  • 컴파일 시점에 타입체크를 수행 ⇒ 통과하지 못하면 error를 발생시킴.
  • 타입의 일관성을 강제함으로써 안정적인 코드를 구현할 수 있으며, 이는 런타임에서 발생하는 에러를 줄인다.

동적타입언어 ( ex. 자바스크립트, 파이썬, PHP 등.. )

  • 타입을 선언하지 않으며, 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.
  • 선언이 아닌 할당에 의해 타입이 결정( 타입추론 )된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있는 이 특징을 동적타이핑(dynamic typing)이라고 한다.
  • 자바스크립트와 같이 이런 특징을 가진 언어를 정적타입과 구별하기 위해 동적타입언어라고 한다.
  • 장단점
    • 장점 : 동적타입의 언어는 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있어 유연성이 높아 편리하다.
    • 단점 : 동적타입언어의 변수는 변수값이 언제든지 변경될 수 있고, 값의 변경에 의해 타입도 언제든지 변경될 수 있으므로 값을 확인하기 전에는 타입을 확신할 수 없어 신뢰성이 떨어진다.

위 내용을 토대로 면접으로 나올수 있는 질문

  • 자바스크립트의 number 타입은 다른 언어와 차이점이 무엇인가?
  • undefined와 null의 차이점
  • 데이터 타입이 필요한 이유
  • 정적타입언어 vs 동적타입언어
  • 동적타입언어의 단점
profile
코딩은 짜릿해 늘 새로워 ✨

0개의 댓글