값
컴퓨터는 데이터만이 존재한다. 데이터는 모두 일련의 긴 비트(bit)로 저장되어 있다.비트(bit)는 0과 1로 설명할 수 있는 두 개의 값으로 이루어진다.1바이트(byte)는 8bit이다. 바이트는 1KB, 1MB, 1GB 등의 단위로 사용된다.
대량의 비트를 분실하지 않고 처리하려면 정보의 조각을 나타내는 청크(chunk)로 분리해야 한다.
자바스크립트 환경에서는 이러한 청크를 값(value)이라고 부른다.
모든 값은 비트로 이뤄지지만 서로 다른 역할을 하며, 모든 값은 역할을 지정하는 타입(type)을 갖는다.
값을 만드려면 이름을 호출해야 한다.
모든 값은 어딘가에 저장돼 있고, 동시에 많은 양을 사용하려 한다면 메모리가 부족할 수 있다.
다행히 이는 동시에 모두 필요한 경우에만 발생하는 문제다. 더 이상 사용하지 않으면 곧 정리되고 다음 값을 생성하기 위한 재료로 재활용될 비트를 남긴다.
숫자
숫자는 데이터 타입 중 하나로 '숫자 값'이다. 예를 들어 13 이라는 숫자를 프로그램에서 사용한다면 13에 해당하는 비트 패턴이 컴퓨터의 메모리에 존재하게 된다.
자바스크립트에서는 하나의 숫자 값을 저장하는데 고정된 64개의 비트를 사용한다. 64비트로 만들 수 있는 패턴은 한정돼 있다.
즉 2^64만큼의 숫자를 표현할 수 있으며, 이는 약 1,800경으로 엄청난 양이다.
하지만 초기의 컴퓨터 메모리는 이보다 훨씬 더 작았고, 사람들은 숫자를 표현하는데 8 또는 16비트 그룹을 사용했었다. 이는 주어진 비트의 수에 맞지 않는 숫자가 되기 쉽기 때문에 뜻하지 않게 오버플로우(overflow)가 발생했다.
하지만 정확히는 '+', '-' 와 같은 부호와 '소수점의 위치'를 사용하는데 또한 비트가 사용되기 때문에 실제로 저장할 수 있는 정수는 9,000조 범위 이상이며 역시 아주 크다.
앞서 언급한 9,000조 보다 작은 정수의 계산은 언제나 정확성이 보장된다.
하지만 안타깝게도 분수의 계산은 보통 그렇지 않다. 이러한 문제를 인식하고 '분수 디지털 숫자(fractional digital number)'를 정확한 값이 아닌 근사치로 취급해야 한다.
숫자를 가지고 하는 일은 주로 계산(arthmetic)이다. +, -, *, /, % 와 같은 심볼을 사용하고 있으며, 이 심볼을 연산자(operator)라고 부른다. 연산자에도 종류가 다양하며 앞서 소개한 5가지는 산술 연산자(arthmetic operator)이다.
자바스크립트에는 3가지의 특별한 숫자 값이 있으며, 이는 일반적인 숫자처럼 동작하지는 않는다.
1) Infinity : 양의 무한대를 의미한다.
2) -Infinity : 음의 무한대 의미한다.
3) NaN : not a number를 의미한다. 0 / 0 이나 Infinity - Inifinity 또는 그 밖에 의미 있는 계산 결과가 나오지 않는 모든 숫자의 연산을 하려고 할 때 이 결과를 얻는다.
문자열
문자열은 데이터 타입은 텍스트를 나타낸다. 따옴표(', quote)로 문자열을 감싸는 형태이다.
'행동하기 힘들면 조사하라, 조사하기 힘들면 잠을 자라'
"행동하기 힘들면 조사하라, 조사하기 힘들면 잠을 자라"
`행동하기 힘들면 조사하라, 조사하기 힘들면 잠을 자라`
시작과 끝 따옴표를 일치시키기만 한다면 따옴표, 큰 따옴표, 백틱으로 문자열을 표현할 수 있다.
텍스트 내에 백슬래시(\)를 포함하면 백슬래시 다음에 오는 문자는 특별한 의미를 갖는다는 것을 알려준다.
이것을 문자 이스케이프(escape)라고 한다. 백슬래시 다음에 나오는 인용 부호는 문자열을 끝내지 않고 문자열의 일부가 된다.
"This is the first line\nAnd this is the second"
위 문장은 아래와 같이 브라우저에서 표현된다.
THis is the first line
And this is the Second
문자열도 마찬가지로 컴퓨터 내부에 존재할 수 있는 일련의 비트로 모델링 돼야 한다.
자바스크립트에서 이것을 처리하는 방식은 유니코드(Unicode) 표준을 따른다.
자바스크립트의 표현은 문자열 요소당 16비트를 사용하며, 최대 2^16개의 다양한 문자를 기술할 수 있다. 하지만 유니코드에서는 이보다 더 많은 문자를 정의하고 있으며 약 2배 가량 더 많다. 따라서 다양한 이모지와 같은 일부 문자는 자바스크립트 문자열에서 두 개의 문자열 위치(character position)를 차지한다.
문자열은 '+' 연산자를 사용하여 두 개의 문자열을 하나로 합친다.
백틱 인용부호를 사용한 문자열은 일반적으로 템플릿 리터럴(templage literal)이라고 부르며 몇 가지 기능을 더 사용할 수 있다. 템플릿 리터럴( ${} )의 내부에 무언가를 작성하면 그 결과가 계산돼 문자열로 변환되고 해당 위치에 포함된다.
단항 연산자
모든 연산자가 심볼은 아니다. 일부는 단어로 구성된다. 한 예로는 typeof 연산자가 있으며 주어진 값의 타입 이름을 문자열 값으로 만든다.
지금까지 살펴본 연산자는 모두 두 개의 값을 계산했지만 typeof는 하나의 값만 계산 한다. 두 개의 값을 사용하는 연산자를 이항(binary) 연산자라고 하며 하나를 사용하는 연산자를 단항(unary) 연산자라고 한다. 마이너스(minus) 연산자는 이항 연산자와 단항 연산자로 모두 사용할 수 있다.
const num1 = 10
const num2 = 1
-num1
// -> -10
num1 - num2
// -> 9
불리언
가끔 yes와 no 또는 on과 off와 같이 단 두가지 가능성을 판별하는 값을 사용해야 하는 경우가 있다.
이러한 목적과 맞게 자바스크립트는 true와 false 단 두가지 값만 갖는 불리언(boolean) 타입을 제공한다.
비교
> 와 < 기호는 각각 '보다 크다', '보다 작다'를 나타내는 일반적인 심볼이다. 이 둘은 이항 연산자이이다.
문자열도 같은 방식으로 비교할 수 있다. 문자열 순서를 갖는 방식은 크게는 알파벳이지만 사전에서 볼 수 있는 것과는 사실 다르다.
대문자는 항상 소문자보다 작다. !와 -과 같은 특수문자도 순서를 갖는다.
문자열을 비교할 때 자바스크립트에서 왼쪽에서 오른쪽으로 진행하면서 유니코드와 일일이 비교한다.
NaN === Nan은 false이다. 무의미한 결과(NaN)는 다른 무의미한 결과(NaN)와는 다르기 때문이다.
논리 연산자
불리언 값 자체에 적용할 수 있는 몇가지 연산자가 있다.
자바스크립트에는 세 가지 논리 연산자 and, or, not이 있다. 이러한 연산자는 불리언의 근거로 사용할 수 있다.
1) && : 논리곱(and)을 나타낸다. 주어진 값이 모두 true이면 결과는 true이다.
2) || : 논리합(or)을 나타낸다. 주어진 값의 어느 하나가 true이면 결과는 true이다.
3) ! : 부정(not)을 나타낸다. 주어진 값의 반대값을 나타내는 단항 연산자이다. 주어진 값이 true이면 false를 나타낸다.
삼항(ternary) 연산자는 물음표(?)와 콜론(:)을 사용해서 작성한다. 조건 연산자(conditional operator)라고도 한다.
true ? 1 : 2
// -> 1
false ? 1 : 2
// -> 2
빈 값
null과 undefiend 두 개의 특별한 값이 있으며 의미 있는 값이 없음을 표현하는데 사용한다. 그 자체가 값이지만 아무런 정보를 갖지 않는다.
자바스크립트 언어에서 의미 있는 값을 만들지 못하는 연산에서는 어떤 값이라도 반환해야 하기 때문에 단순히(어쩔 수 없이) undefiend를 만든다.
undefined와 null 사이의 의미상 차이점은 자바스크립트 설계의 우연한 사고이며 대부분의 경우에는 문제가 되지 않는다. 실제로 이러한 값을 고려해야 하는 경우는 대부분 서로 대체가 가능한 것으로 생각하면 된다.
자동 형 변환
8 * NULL
// 0
"5" - 1
// 4
"5" + 1
// 51
"five" * 2
// NaN
false == 0
// true
"" == 0
// true
null == undefined
// true
null == 0
// false
연산자를 잘못된 타입의 값에 적용하면 자바스크립트에서는 해당 값을 자신이 원하거나 기대한 것과는 다른 방식을 통해 내부적으로 필요한 타입으로 조용히 변환한다. 이것을 강제 형 변환(type coercion 또는 암시적 형 변환)이라고 한다.
자바스크립트의 5가지 타입(숫자, 문자열, 불리언, null & undefined)을 살펴봤다.
'요약 정리 > 도서 - 자바스크립트 스킬업' 카테고리의 다른 글
EP2. 프로그램 구조 (0) | 2021.12.05 |
---|---|
EP0. 준비 (0) | 2021.12.05 |