JavaScript 리터럴 —
진법·불린·문자열 완전 정리
코드 자체는 짧지만 안에 담긴 개념은 자바스크립트를 배우는 사람이 한 번은 반드시 걸려 넘어지는 것들이다. 숫자를 8진수·16진수로 쓰는 표기법, 참/거짓을 나타내는 불린 값, 그리고 문자열 안에 따옴표를 넣는 이스케이프까지 — 겉보기엔 사소해 보이지만 실무에서 은근히 자주 마주치는 함정들이 모여 있다.
8진수 015는 십진수로 13
16진수 0x15는 십진수로 21
condition은 true
문자열 : 단일인용부호로도 표현
그녀는 "누구세요"라고 했습니다.
리터럴(literal)은 "코드 안에 직접 써넣은 값" 그 자체를 가리키는 말이다. let oct = 015;에서 oct는 변수(그릇)지만, 015는 리터럴(그릇에 담긴 값 자체)이다. 마찬가지로 true, "안녕", 0x15 모두 리터럴이다.
이 구분이 중요한 이유는, 리터럴은 표기법에 따라 값이 완전히 달라질 수 있기 때문이다. 같은 자릿수 "15"라도 어떻게 적느냐에 따라 십진수 15가 될 수도, 8진수 15가 될 수도, 16진수 15가 될 수도 있다. 이번 글에서 다루는 8진수·16진수·불린·문자열 리터럴이 바로 그 "표기법의 규칙들"이다.
자바스크립트에서 숫자 리터럴 앞에 0을 붙이면 "이건 8진수로 읽어라"는 신호가 된다. 8진수는 0, 1, 2, 3, 4, 5, 6, 7 — 이렇게 8개의 숫자만 쓰는 체계다. 015를 8진수로 풀면 다음과 같다.
즉 겉보기엔 "15"라고 써 있지만, 8진수 규칙으로 계산하면 십진수 13이 된다. 코드에 document.write("... " + oct)라고 출력하면 브라우저는 8진수 표기를 다시 10진수로 바꿔서 13이라는 값을 보여준다.
16진수는 0~9 다음에 10~15를 각각 a, b, c, d, e, f 한 글자로 표현하는 체계다. 자바스크립트에서는 숫자 앞에 0x(또는 0X)를 붙이면 "이건 16진수다"라는 뜻이 된다. 0x15를 풀어보면 다음과 같다.
16진수는 특히 색상 코드(#ff0000)나 메모리 주소를 다룰 때 자주 등장한다. 자릿수가 커질수록 10진수보다 훨씬 짧게 표현할 수 있기 때문이다.
#7dd3fc 같은 색상 코드도 사실 16진수 리터럴이다. 이번에 배운 0x 규칙과 원리가 같다.
컴퓨터는 내부적으로 0과 1(2진법)만 다룬다. 그런데 2진법은 자릿수가 너무 길어져서 사람이 읽기 힘들다(21을 2진수로 쓰면 10101). 8진수와 16진수는 2진수를 3자리씩, 4자리씩 묶어서 짧게 표현한 것이라 컴퓨터 내부 값과 변환이 쉬우면서도 사람이 읽기엔 10진수보다 짧다는 장점이 있다.
| 진법 | 사용 숫자 | 표기 | 주 사용처 |
|---|---|---|---|
| 2진수(binary) | 0, 1 | 0b1101 | 컴퓨터 내부 연산, 비트 플래그 |
| 8진수(octal) | 0~7 | 015 | 유닉스 파일 권한(chmod 755) 등 |
| 10진수(decimal) | 0~9 | 13 | 사람이 일상적으로 쓰는 표기 |
| 16진수(hex) | 0~9, a~f | 0x15 | 색상 코드, 메모리 주소 |
불린(Boolean)은 참(true) 또는 거짓(false), 이 두 값만 갖는 자료형이다. 원본 코드의 주석에 "True로 하면 안됨"이라고 적혀 있는데, 이는 대소문자를 정확히 구분하는 자바스크립트의 특성 때문이다. true, false는 언어가 미리 정해둔 예약어(키워드)라서 정확히 소문자로만 써야 인식된다.
조건문·비교 연산 결과로 바로 사용 가능
"정의되지 않은 변수(ReferenceError)"로 오류 발생
let condition = True;라고 쓰면 자바스크립트는 이걸 값이 아니라 "True라는 이름의 변수"로 착각한다. 그런 변수는 선언된 적이 없으므로 ReferenceError: True is not defined 오류가 발생한다.많은 언어에서 작은따옴표와 큰따옴표를 구분해서 쓰지만, 자바스크립트는 둘 다 똑같이 문자열을 감싸는 용도로 쓸 수 있다. 원본 코드에서도 document.write('문자열 : ...')은 작은따옴표를, 나머지는 큰따옴표를 쓰고 있는데 결과는 동일하게 문자열이다.
다만 실무에서는 한 프로젝트 안에서는 한 가지 스타일로 통일하는 것이 좋다. 섞어 쓰면 가독성이 떨어지고, 팀 컨벤션에 따라 ESLint 같은 도구가 통일을 강제하기도 한다.
큰따옴표로 문자열을 감쌌는데 그 안에 또 큰따옴표를 그대로 쓰면, 자바스크립트는 "여기서 문자열이 끝났다"고 착각한다. 원본 코드의 "그녀는 \"누구세요\"라고 했습니다."가 바로 이 문제를 해결한 예시다.
이렇게 백슬래시(\)를 따옴표 앞에 붙여서 "이건 문자열을 끝내는 기호가 아니라 그냥 글자다"라고 알려주는 것을 이스케이프(escape)라고 부른다.
- 바깥을 큰따옴표로, 안쪽은 작은따옴표로 —
"그녀는 '누구세요'라고 했습니다." - 템플릿 리터럴(백틱
`) 사용 —`그녀는 "누구세요"라고 했습니다.` - 어느 방법이든 "따옴표 종류를 다르게 쓰거나, 이스케이프로 알려준다"는 원리는 같다
초보자가 가장 자주 걸리는 함정이 이것이다. 우편번호나 학번처럼 앞자리가 0으로 시작하는 숫자를 다루다가, 별생각 없이 let zip = 015;처럼 써버리면 이 값은 문자열이 아니라 숫자 리터럴로 취급되어 8진수로 해석된다. 결과적으로 저장되는 값은 15가 아니라 13이다.
0 접두사를 의도적으로 쓴다.0o15 (숫자 0 + 알파벳 o)처럼 쓰는 것도 가능하다. 015 같은 옛날식 표기는 헷갈리기 쉬워 점점 덜 권장된다.| 실수 | 증상 | 해결 |
|---|---|---|
| 015를 "그냥 15"로 오해 | 출력했더니 13이 나와서 당황 | 숫자 앞 0은 8진수 표기임을 기억, 필요없으면 0 빼기 |
| true/false를 True/False로 표기 | ReferenceError: True is not defined | 불린 리터럴은 반드시 소문자 true/false |
| 문자열 안에 같은 따옴표 그대로 사용 | SyntaxError로 스크립트 전체가 멈춤 | 백슬래시(\)로 이스케이프하거나 따옴표 종류를 다르게 |
| 16진수에서 0x 빠뜨림 | 0x15가 아니라 그냥 15(십진수)로 계산됨 | 16진수를 쓸 땐 반드시 0x 접두사 붙이기 |
| 우편번호·전화번호를 숫자로 저장 | 앞자리 0이 사라지거나 8진수로 잘못 계산됨 | 0으로 시작하는 값은 문자열("015")로 저장 |
| 작은따옴표·큰따옴표를 코드 안에서 무작위로 혼용 | 가독성 저하, 팀 컨벤션 위반 | 프로젝트 전체에서 한 가지 스타일로 통일 |
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| JavaScript if-else — 학점 매기기 완전 정리 (0) | 2026.07.03 |
|---|---|
| JavaScript 링크·외부 파일 — href · alert · 이미지 교체 완전 정리 (0) | 2026.07.03 |
| JavaScript 산술 연산 — +·-·*·/·% 완전 정리 (0) | 2026.07.02 |
| JavaScript 변수 선언 — let · 전역/지역/블록 스코프 완전 정리 (0) | 2026.07.02 |
| MySQL PROCEDURE SELECT — 특정 회원 조회 완전 정리 (0) | 2026.07.02 |
왕진 블로그

댓글