동적 타입
Javascript는 느슨한 타입, 즉 타입과 변수가 느슨하게 묶인 동적(dynamic) 언어입니다. 플레이를 누르면 컴퓨터가 이 파일을 실행할 수 있을지 미리 아는 것이 아닌(컴파일 시) 코드를 하나 하나 실행하면서(런타임) 타입과 변수가 묶이는 방식입니다.
두 종류의 자바스크립트 타입
- 자바스크립트의 타입은 크게 두가지로 나뉩니다. 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로 나뉨
'Computer launguage > JS' 카테고리의 다른 글
[Javascript] Set과 Map에 대해 알아보자 (0) | 2022.01.28 |
---|