moon palace

[Javs Script] boolean, null, undefined?? 데이터 타입이란? 본문

JavaScript

[Javs Script] boolean, null, undefined?? 데이터 타입이란?

Hdaleee 2020. 2. 21. 00:35

자바스크립트뿐만 아니라 다양한 개발 언어들을 정의하자면 역시나 '컴퓨터와 소통하는 언어'라고 할 수 있을 것이다. 필자가 배우면서 느끼기로 데이터 타입이라는 개념은 영어의 '품사'와 매우 흡사하다고 느꼈고, 누군가 이 글을 보고서 필자처럼 자바스크립트에 대해서 조금 더 구체화된 개념을 갖기를 기대하고 있다. (흡사하다고 느낀 부분은 사실 아주 조그마한 접점이기는 하다. 어떤 부분이냐면, 각 품사마다 정해진 대략적인 모양이 있고 수행하는 역할들도 어느 정도씩 할당하고 있다는 점이었다. 물론 개인적인 이해 방법이었기에 다른 분들은 공감하지 못할 수도 있다.)


데이터 타입의 종류

자바 스크립트에서는 여러개의 데이터 타입이 존재한다. 일반적인 사람과 대화하는 데 사용되는 언어가 아니기에 독특한 개념의 것들도 있다. 현재 mdn에서 정의하는 데이터 타입에는 총 7가지가 있고 데이터 타입의 종류는 다음과 같다. 이 중에서 symbol이라는 친구는 비교적 최근에 추가된 새 데이터 타입이고 주로 고유한 값을 가지며 객체의 프로퍼티로 사용되는 경우가 많다고 한다. 필자도 아직은 제대로 공부하지 못했으니 이런 것이 있구나 정도만 하고 넘어가야겠다.

// Number / 숫자
let num = 123;

// String / 문자열
let str = 'hdaleee';

// Null / 널
let noValue = null;

// Undefined / 언디파인드(정의되지 않은 값)
let und;
console.log(und)
// undefined

// Boolean / 불리언
let flag = true;

//symbol / 심볼
const a = Symbol()

// Object / 객체
let obj = {a:123, b:'hdaleee', c:['a', 'r', 'r']}

1. Number / 숫자
숫자는 어렵지 않다. 정말로 숫자값을 나타낸다. 숫자 있는 그대로를 사용하면 되고, 기본적인 사칙연산이 가능하다. 특정 상황에서 숫자가 와야 하는 자리에 숫자가 아닌 값이 등장한다면 NaN(not a number)이 리턴된다.

// 사칙연산 _ 변수로 지정하지 않아도 연산은 가능하다.(하지만 그렇게 직접적으로 숫자를 계산할 일이 있을까..?)
let a = 3;
let b = 2;

console.log(a+b)
// 5
console.log(a-b)
// 1
console.log(a*b)
// 6
console.log(a/b)
// 1.5

2. String / 문자열
문자열 또한 크게 어렵지않다. 따옴표로 감싸주기만 하면 문자열이 된다고 생각하면 된다. 주의할 점은 당연하게도 작은따옴표로 시작했다면 작은따옴표로, 큰 따옴표로 시작했다면 큰 따옴표로 마무리를 해야 한다는 것이다. 추가적으로 문자열 안에 따옴표를 적고 싶다면 '이스케이프 시퀀스'를 검색해보자. 문자열에서 재미있는 점은 문자열들을 가지고 '+ 연산'을 할 수 있다는 점이다. 

let a = 'hello,'
let b = 'world'
let c = 'hello, '

console.log(a + b)
// hello,wold

console.log(a + " " + b)
// hello, wold

console.log(c + b)
// hello, wold

3. null / 널 & undefined / 언디파인드
null은 의도적으로 값을 비워둔 개념이다. undefined와 많이 헷갈려하는데, 먼저 이야기하자면 null은 의도적으로 비어있는 값을 선언하기 위해 사용된다. 다시 말해 null은 선언과 할당(값이 없음을 할당)이 모두 된 상태이고, undefined는 선언만 되고 할당이 되어있지 않은(할당하지 않아 값이 존재하지 않음) 모든 상태를 말한다.

// a에 null 이라는 값을 할당하여 값이 없는 상태로 만든다.
let a = null;
console.log(a)
// null

// b를 선언만 하고 값을 할당하지 않은 채로 둔다면 호출 시 undefind을 리턴한다.
let b;
console.log(b)
// undefined

// c를 선언하지 않은 채로 호출하면 undefind을 리턴한다.
console.log(c)
// undefined

4. Boolean / 불리언
불리언은 조금 독특한데 true와 false 만을 값으로 갖는 데이터 타입이다. 조건문에서 많이 활용되며 어떠한 조건이 참이냐 거짓이냐고 구분한다. 아래 예시를 보면 조금 더 구체적인 이해가 가능 할 듯하다. 불리언의 값 확인은 Boolean() 함수를 통해 확인할 수 있다. 혹은 직접 변수에 true나 false 값을 미리 할당해둘 수도 있다.

let a = 1;
let b = 'hdaleee'
let c = null;
let d;
let e = true;

console.log(Boolean(a))
// true
console.log(Boolean(b))
// true
console.log(Boolean(c))
// false
console.log(Boolean(d))
// false
console.log(Boolean(e))
// true

5. Object / 객체
객체란 요약하고 요약하자면 특정한 값들을 담아둔 그릇이라고 볼 수있다. 혹은 컴퓨터와 비교했을 때, 관련된 특정 파일들을 폴더별로 분류하는 개념이라고 생각해도 되겠다. 객체를 모두 설명하기에 객체는 너무 할 말이 많기에 오늘은 데이터 타입으로서의 이야기만 하고 넘어가겠다. 데이터 타입으로서의 객체에는 함수와 배열, 날짜, 정규식을 포함하고 있다. 간략하게 함수와 객체, 배열에 대해서만 예시로 살펴보고 넘어가자. 함수는 알고 있는 그 함수가 맞다. 생성자로서의 함수는 객체를 만들어 내는 능력을 갖고 있다. 관련하여 추후에 객체에 대한 이야기를 할 때가 오면 그때 자세히 하도록 하고 일단은 함수도 객체로 분류된다는 것만 기억하면 될 것 같다. 객체는 key와 value를 쌍으로 담고 있는 그릇이라 할 수 있고, 배열은 그냥 값들을 담아 둔 그릇이라고 볼 수 있다.

// 함수
let func = fuction(){
	let a = 'hello, '
    let b = 'world'
    console.log(a+b)
}
func()
// hello, world

// 객체 _ 객체는 중괄호로 만들 수 있으며 내용물은 ','로 구분하며, 키와 값은 ':'로 쌍을 만든다.
let obj = {a:123, b:'hdaleee', c:null, d:true, e:function(){}, f:function(){}}

// 배열 _ 배열은 대괄호를 이용해 만들고 ','를 통해 값들을 구분한다.
let arr = [123, 'hdaleee', null, true, function(){}, {a:123, b:'hdaleee'}]
Comments