본문으로 바로가기

데이터 타입

category Programming/JavaScript 2021. 8. 15. 16:36
반응형

자바스크립트에 대해 세 번째로 다룰 주제는 데이터 타입이다. 변수에 관한 내용을 다룬 지난 글에서 알 수 있듯이, 자바스크립트도 파이썬과 마찬가지로 변수 자체에 데이터 타입을 부여하지 않는다. 다시 말해, 지금까지 숫자형 데이터를 가지고 있던 변수에 문자열 데이터를 할당할 수도 있다는 의미이다. 그래서, 자바스크립트가 어떤 데이터 타입들을 지원하는지를 분명히 이해하고 넘어갈 필요가 있다.

자바스크립트는 숫자, 문자열, 불리언, 심볼, null, undefined 타입을 지원한다. (이번 글에서는 원시 데이터 타입만을 다룬다.)

숫자형 타입

자바스크립트에 대해 설명하는 글을 보면서 정말 깜짝 놀란 부분인데, 자바스크립트에서는 위 그림에서 보는 것과 같이 단 하나의 숫자형 타입만 지원한다. 그리고 이 숫자형 타입은 IEEE-754의 배정도 타입이다. 다시 말해, 10이라는 정수를 할당해도 자바스크립트는 10.0이라는 부동소수형 타입으로 인식한다는 의미이다. 이래도 괜찮은가?? 라는 것이 솔직한 나의 생각이긴 한데, 자바스크립트 자체를 최대한 이해하기 위해 노력해본다면, 자바스크립트 태생 자체가 웹 애플리케이션, 정확히는 프론트 엔드 성향의 웹 디자이너를 대상으로 시작된 언어이다보니, 프로그래밍에 있어서 초보자에 해당하는 그들이 부담 없이 접근할 수 있도록 만들기 위해서 이런 선택을 했겠다고 추측되지만, 처리하는 데이터가 많아지면서 고정밀의 복잡한 수치 연산이 많이 필요해진 지금 상황에서는 오히려 독이 될 수 있는 부분이라고도 생각한다.

숫자형 데이터를 배정도의 부동 소수로 처리하는 것 치고, 위 그림과 같이 2진수와 16진수 (8진수도 가능)로도 데이터를 할당할 수 있다는 점은 넌센스 같으면서도 재밌다는 생각이 드는 부분이다.

문자열 타입

자바스크립트에서 지원하는 두번째 원시 데이터 타입은 바로 문자열 타입이다. 이름 그대로 문자들을 열거해놓은 데이터 타입을 의미한다. 앞에서 이야기한 숫자형 데이터 타입만큼, 자바스크립트의 문자열 타입도 꽤나 흥미로운 특징을 가지고 있는데, 대부분의 프로그래밍 언어에서 문자열을 ASCII 포맷으로 처리하는 것에 반해, 자바스크립트에서는 유니코드 포맷의 문자열을 처리한다.

대부분의 프로그래밍 언어와 마찬가지로, 따옴표를 이용해서 문자열을 표현한다. 작은 따옴표와 큰 따옴표 모두 사용할 수 있고, 특히 ES6부터 지원하기 시작하는 백틱 (키보드 숫자 1의 왼쪽에 있는 작은 따옴표와 비슷하게 생긴 키)은 문자열의 줄바꿈이나 탭과 같은 공백도 모두 문자열에 적용시킬 수 있다.

불리언 타입

참 또는 거짓이라는 논리적 데이터 (불 대수라고도 함.)를 의미하는 데이터 타입이다. 일반적인 PC 프로그래밍 언어에서는 주로 0이나 1과 같은 숫자로 불리언 데이터를 표현하지만, PLC 프로그래밍 언어에서는 불리언 타입 데이터를 직접 프로그램 작성 과정에서 사용한다.

위 그림에서 볼 수 있듯이, true 또는 false라는 단어 자체를 불리언 타입의 상수로 직접 사용한다. 불리언 타입 상수가 영어 단어라는 점 때문에 따옴표를 붙이게 되면, 불리언 타입이 아닌 문자열 타입으로 전환된다는 점도 기억해야 한다.

심볼 타입

ES6에서 심볼 타입이라는 새로운 데이터 타입을 하나 추가하였다. 데이터 타입에 관한 내용을 정리하는 글이므로, 자바스크립트에서 지원하는 심볼 타입에 관한 내용도 다루고는 있다만, 심볼에 대해 설명하는 여러 문서들을 읽어보면 일반적인 데이터라고 하기에는 상당한 활용도를 보이고 있는 데이터 타입이다. 그래서 이번 글에서는 본래의 목적에 맞게 심볼 타입에 관한 개요만 이야기하고, 나중에 시간을 할애해서 좀 더 깊게 내용을 다뤄볼 예정이다.

자바스크립트에서 지원하는 심볼은 변경 불가능한 토큰의 생성을 목적으로 만들어진 데이터 타입이라고 설명하고 있다. 그래서, 다른 데이터들을 할당할 때 처럼 등호 다음에 상수 데이터를 바로 사용하는 것이 아니라, Symbol() 함수를 이용해서 할당한다.

그리고, 같은 데이터가 할당된 것 같지만, 유일한 토큰으로 취급되므로 위 그림과 같은 결과를 보여준다.

null과 undefined

마지막으로 살펴볼 데이터 타입은 바로 null과 undefined이다. 이들은 데이터 타입이라고 볼 수도 있고, 데이터 자체라고 볼 수도 있다. 왜냐면, null 타입이 가질 수 있는 데이터는 오직 null 뿐이고, undefined 타입도 가질 수 있는 데이터가 undefined 뿐이기 때문이다.

‘아무 가치 없는’이라는 뜻의 null은 본연의 뜻 그대로 프로그래밍에서 아무것도 없다는 의미로 많이 사용된다. 이런 전통 아닌 전통을 자바스크립트도 이어 받아, 아무 값도 갖지 않은 상태를 의도적으로 표현할 때 null 타입을 사용한다. 하지만, 위 그림처럼 typeof 함수를 이용해서 null 데이터의 타입을 확인해보면, 재미나게도 Object로 표시된다. 왜 이렇게 표현되는지를 아무리 고민해봐도 내가 가진 프로그래밍에 대한 상식으로는 도저히 이해가 되지 않는다. 일단, 자바스크립트에 대한 내용을 좀 더 파내려가다 보면 어느 순간 이해할 수 있겠지라는 생각과 함께 지금은 넘어가기로 하자.

다시 null 데이터 본연의 내용으로 돌아와서… 프로그래머가 아무 값도 갖지 않은 상태를 의도적으로 표현할 때 null 타입을 사용한다고 바로 앞에서 이야기 했다. 근데, 변수가 아무 값도 갖지 않은 상태라면, 선언만 해놓고 값을 할당하지 않으면 그게 바로 아무 값도 갖지 않은 상태가 아닐까?

그런 생각에, 바로 직전의 예제 프로그램에서 변수 선언 시 값을 할당했던 부분을 삭제하였다. 그리고, 프로그램을 실행했을 때, 선언된 변수에는 null이 아닌 undefined가 들어 있고, 변수의 타입 역시 undefined임을 확인할 수 있다.

그렇다면, null과 undefined는 같은 의미인가?? 라는 생각을 갖게 되는데, ‘정의되지 않은’ 이라는 의미의 undefined와 ‘아무 값도 갖지 않음.’ 이라는 의미의 null은 비슷해보이지만 분명히 그 의미에는 미묘한 차이가 있다. 이 부분에 대해 개인적인 생각을 조금 나열해보자면, 변수를 선언하는 과정에서 아무런 데이터를 할당하지 않았을 때, 자바스크립트의 인터프리터는 해당 변수에게 undefined라는 데이터를 부여하였다는 점에서, undefined는 사용자보다 시스템에서 접근하는 영역이 아닐까 생각한다. 반대로, null은 시스템보다는 사용자가 끌어다 사용하는 영역이라는 느낌이 강하다. 두 단어의 사전적 의미가 갖고 있는 미묘한 차이도 이렇게 주장하는데 어느 정도 영향을 끼쳤다.

그렇다고, 사용자가 undefined를 직접 사용할 수 없도록 되어 있는가?? 하면, 위 그림처럼 그런 것은 또 아니다. 그래서, 이 두 데이터 타입에 대해 어느 부분이 맞는지는 다른 해석의 여지가 충분히 남아 있긴 하지만, 아무튼 개인적인 경험에 비추어, 사용자가 직접 값이 없는 상태를 부여할 때는 null, 시스템에서 부여할 때는 undefined라고 정리하고 넘어가겠다.

반응형

'Programming > JavaScript' 카테고리의 다른 글

변수 (var 대신 let을 쓰자.)  (0) 2021.08.12
자바스크립트에서 출력하는 방법  (0) 2021.08.11
자바스크립트  (0) 2021.08.10