Computer launguage/JS

[Javascript] 데이터 타입과 자료구조에 대해 알아보자

김민석(갈레, 페퍼) 2022. 1. 21. 10:31
반응형

동적 타입

Javascript는 느슨한 타입, 즉 타입과 변수가 느슨하게 묶인 동적(dynamic) 언어입니다. 플레이를 누르면 컴퓨터가 이 파일을 실행할 수 있을지 미리 아는 것이 아닌(컴파일 시) 코드를 하나 하나 실행하면서(런타임) 타입과 변수가 묶이는 방식입니다.

 

두 종류의 자바스크립트 타입

출처: tutorial.eyehunts.com

- 자바스크립트의 타입은 크게 두가지로 나뉩니다. Primitive 값과 Object(객체)값.

- Primitive 값은 말 그대로 원시 값이기 때문에 변할 수가 없습니다. 얘네들이 원본 그 자체가 되는 것들이죠.

- Object 값은 Array 등 기타 모든 것으로 보입니다. 이들은 Primitive 값을 묶는 자료구조라고 볼 수도 있겠군요.

 

 

 

Primitive 값에 대해 먼저 알아보죠

 

Primitive(원시) 값

- 정의: 언어의 최고 낮은 레벨에서 직접 표현되는 불변 데이터(출처: WDN Web Docs)

- 여기서 불변의 데이터란, c언어와 달리 문자열 메모리 위치에 접근해서 문자열 내 문자 변경이 불가능한 형태를 말합니다.

- 이러한 Primitive 값은 7가지 종류가 있습니다. Boolean, Null, Undefined, Number, BigInt, String, Symbol이 그것들이죠.

 

Boolean

- 논리적인 데이터 유형입니다. true, false 값을 지닙니다.

 

Null

- 어떤 값이 '의도적'으로 비어 있음을 나타냅니다. (자연스레 의도적이지 않게 비어있는 경우도 있겠죠?)

- 불리언 값으로 연산될 경우에는 거짓으로 나옵니다. (자연스레 if 내에서 == 동등 연산으로 취급되는구나 추측 가능)

let hi = null

if (hi)
{
  console.log('not null');
}
else
{
  console.log('it is null');
}

 

Undefined

- 선언 후 할당하지 않은 변수에 할당됨. 즉 의도적이지 않게 비어있는 경우입니다. 예외처리를 해야겠군요!

- 예약어가 아니라 변수 이름으로 쓸 수 있지만, 유지보수와 디버깅에 안좋기 때문에 피하는게 좋습니다.

 

Number

- 64비트 이진 형식 숫자입니다. 부동 소수점을 이용한 실수 표기를 하죠. -(2^53-1) ~ 2^53-1 사이 수를 표기합니다.

- Infinity, -Infinity, NaN 세개의 상징적인 숫자가 존재합니다.

- 필요할 땐 아래와 같은 속성 또한 제공합니다. Number.Max_VALUE, Number.MIN_VALUE.

- 이중에서 0은 특별한 값입니다. 두가지 방식으로 표현 가능하기 때문이죠. 0은 +0과 -0 두가지 방식으로 표현 될 수 있습니다! 놀랍게도 아래와 같이 적으면 트루가 나오죠! 하지만 Infinity를 이용한 나눗셈에 사용되면 반대 값이 나올 수 있으니 조심하세요!

if (0 == -0)
{
	console.log(true)
}
else
{
	console.log(false)
}

- 자바 스크립트는 십진 수를 위한 연사자가 아닌 이진 연산자도 제공합니다!. 하지만 메모리가 극히 제한된 환경이 아닐 시 코드 유지보스를 생각하면, 비트마스크(하나의 숫자 안에 다수의 불리언을 사용)은 사용 하지 않는 것이 권장됩니다.(출처: WND Web Docs)

 

String

- 텍스트 데이터를 나타낼 때 사용됩니다.

- 16 비트의 부호 없는 정수 값의 집합이죠. 한 문자를 표현하는데 16비트가 사용됩니다!

- string[0]과 같이 변수와 인덱스를 사용하면 특정 문자에 접근이 가능합니다.

- 문자열 자체는 불변이지만 이를 이용하여 완전히 새로운 가공물을 만들 수는 있습니다. ex) 연결 연산(Concat), 부분 문자열(substr)

 

Symbol

- 고유하고 변경 불가능한 원시 값

- 객체의 속성 키로 사용 가능

- 나중에 추가로 올리겠습니다.

 

 

객체

- 정의: 식별자로 참조할 수 있는 메모리 상의 값(출처: WDN Web Docs)

- Property(속성)의 Collection

- 속성 추가 제거 가능

- 다른 객체 & 모든 타입 사용 가능 -> 복잡한 자료구조 구축 가능(위에서 말했던 Primitive로 자료 구조를 구축하는 것이 맞았군요!)

- 속성은 '키' 값으로 식별, 키 값은 문자열 or Symbol

- 속성 안에는 다시 '특성' 존재. (읽기만 가능한지, 수정 불가한지 등

- 객체 Property는 데이터 Property와 접근자 Property로 나뉨

 

출처: WDN Web Docs

 

 

출처: WDN Web Docs

반응형