본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

JavaScript 리터럴 — 숫자·불리언·문자열 완전 정리

by 왕진 2026. 7. 3.
반응형

 

 

Web Development · JavaScript

JavaScript 리터럴 —
진법·불린·문자열 완전 정리

8진수 015·16진수 0x15부터 true/false, 따옴표 이스케이프까지 한 번에
시작 오늘 분석할 코드

코드 자체는 짧지만 안에 담긴 개념은 자바스크립트를 배우는 사람이 한 번은 반드시 걸려 넘어지는 것들이다. 숫자를 8진수·16진수로 쓰는 표기법, 참/거짓을 나타내는 불린 값, 그리고 문자열 안에 따옴표를 넣는 이스케이프까지 — 겉보기엔 사소해 보이지만 실무에서 은근히 자주 마주치는 함정들이 모여 있다.

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>리터럴</title> </head> <body> <h3>리터럴</h3> <hr> <script> let oct = 015; // 015는 8진수. 10진수로 13 let hex = 0x15; // 0x15는 16진수. 10진수로 21 let condition = true; // True로 하면 안됨 document.write("8진수 015는 십진수로 " + oct + "<br>"); document.write("16진수 0x15는 십진수로 " + hex + "<br>"); document.write("condition은 " + condition + "<br>"); document.write('문자열 : 단일인용부호로도 표현' + "<br>"); document.write("그녀는 \"누구세요\"라고 했습니다."); </script> </body> </html>
실제 출력 미리보기

8진수 015는 십진수로 13

16진수 0x15는 십진수로 21

condition은 true

문자열 : 단일인용부호로도 표현

그녀는 "누구세요"라고 했습니다.

용어 용어 정리
리터럴코드에 직접 써넣은 값 자체 (변수가 아니라 값 그 자체)
진법숫자를 표현하는 기수 체계 — 10진법·8진법·16진법 등
8진수0~7까지만 쓰는 수 체계, 앞에 0을 붙여 표기
16진수0~9, a~f(10~15)를 쓰는 수 체계, 앞에 0x를 붙여 표기
불린(Boolean)참(true) 또는 거짓(false) 두 값만 갖는 자료형
문자열(String)따옴표로 감싼 텍스트 데이터
이스케이프백슬래시(\)로 특수문자를 "그냥 글자"로 처리하는 것
document.write()브라우저 화면에 문자열을 그대로 출력하는 함수

1 리터럴이란 무엇인가?
왜 굳이 "리터럴"이라는 용어를 쓰는가?

리터럴(literal)은 "코드 안에 직접 써넣은 값" 그 자체를 가리키는 말이다. let oct = 015;에서 oct는 변수(그릇)지만, 015는 리터럴(그릇에 담긴 값 자체)이다. 마찬가지로 true, "안녕", 0x15 모두 리터럴이다.

이 구분이 중요한 이유는, 리터럴은 표기법에 따라 값이 완전히 달라질 수 있기 때문이다. 같은 자릿수 "15"라도 어떻게 적느냐에 따라 십진수 15가 될 수도, 8진수 15가 될 수도, 16진수 15가 될 수도 있다. 이번 글에서 다루는 8진수·16진수·불린·문자열 리터럴이 바로 그 "표기법의 규칙들"이다.

※ 변수는 리터럴을 담는 상자, 리터럴은 상자 안에 들어가는 값 그 자체라고 생각하면 헷갈리지 않는다.

2 8진수 015 — 왜 13이 되는가?
숫자 앞에 0을 붙이면 8진수가 된다

자바스크립트에서 숫자 리터럴 앞에 0을 붙이면 "이건 8진수로 읽어라"는 신호가 된다. 8진수는 0, 1, 2, 3, 4, 5, 6, 7 — 이렇게 8개의 숫자만 쓰는 체계다. 015를 8진수로 풀면 다음과 같다.

015 (8진수) = 1 × 8¹ + 5 × 8⁰ = 8 + 5 = 13 (10진수)

즉 겉보기엔 "15"라고 써 있지만, 8진수 규칙으로 계산하면 십진수 13이 된다. 코드에 document.write("... " + oct)라고 출력하면 브라우저는 8진수 표기를 다시 10진수로 바꿔서 13이라는 값을 보여준다.

※ 화면에는 "13"만 찍힌다. 자바스크립트는 값을 출력할 때 "8진수였다"는 표기 정보를 남기지 않고 그냥 십진수 결과만 보여준다.

3 16진수 0x15 — 왜 21이 되는가?
0x를 붙이면 16진수가 된다

16진수는 0~9 다음에 10~15를 각각 a, b, c, d, e, f 한 글자로 표현하는 체계다. 자바스크립트에서는 숫자 앞에 0x(또는 0X)를 붙이면 "이건 16진수다"라는 뜻이 된다. 0x15를 풀어보면 다음과 같다.

0x15 (16진수) = 1 × 16¹ + 5 × 16⁰ = 16 + 5 = 21 (10진수)

16진수는 특히 색상 코드(#ff0000)나 메모리 주소를 다룰 때 자주 등장한다. 자릿수가 커질수록 10진수보다 훨씬 짧게 표현할 수 있기 때문이다.

※ CSS의 #7dd3fc 같은 색상 코드도 사실 16진수 리터럴이다. 이번에 배운 0x 규칙과 원리가 같다.

 

반응형

 

4 진법을 왜 여러 개 쓰는가?
사람은 10진법, 컴퓨터는 2진법 — 그 사이의 타협

컴퓨터는 내부적으로 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 색상 코드, 메모리 주소

5 불린 true / false — 왜 대문자는 안 되는가?
true, false는 예약어(키워드)다

불린(Boolean)은 참(true) 또는 거짓(false), 이 두 값만 갖는 자료형이다. 원본 코드의 주석에 "True로 하면 안됨"이라고 적혀 있는데, 이는 대소문자를 정확히 구분하는 자바스크립트의 특성 때문이다. true, false는 언어가 미리 정해둔 예약어(키워드)라서 정확히 소문자로만 써야 인식된다.

true / false (O)
자바스크립트가 정의한 불린 리터럴
조건문·비교 연산 결과로 바로 사용 가능
True / False (X)
자바스크립트는 이 이름의 예약어가 없음
"정의되지 않은 변수(ReferenceError)"로 오류 발생
let condition = True;라고 쓰면 자바스크립트는 이걸 값이 아니라 "True라는 이름의 변수"로 착각한다. 그런 변수는 선언된 적이 없으므로 ReferenceError: True is not defined 오류가 발생한다.

6 문자열 — 작은따옴표와 큰따옴표, 둘 다 된다
' '와 " " 는 기능상 동일하다

많은 언어에서 작은따옴표와 큰따옴표를 구분해서 쓰지만, 자바스크립트는 둘 다 똑같이 문자열을 감싸는 용도로 쓸 수 있다. 원본 코드에서도 document.write('문자열 : ...')은 작은따옴표를, 나머지는 큰따옴표를 쓰고 있는데 결과는 동일하게 문자열이다.

'안녕하세요' // 작은따옴표 문자열 "안녕하세요" // 큰따옴표 문자열 → 둘 다 완전히 같은 문자열

다만 실무에서는 한 프로젝트 안에서는 한 가지 스타일로 통일하는 것이 좋다. 섞어 쓰면 가독성이 떨어지고, 팀 컨벤션에 따라 ESLint 같은 도구가 통일을 강제하기도 한다.


7 이스케이프 \" — 문자열 안에 같은 따옴표 넣기
따옴표 안에 같은 따옴표를 그대로 쓰면 문자열이 깨진다

큰따옴표로 문자열을 감쌌는데 그 안에 또 큰따옴표를 그대로 쓰면, 자바스크립트는 "여기서 문자열이 끝났다"고 착각한다. 원본 코드의 "그녀는 \"누구세요\"라고 했습니다."가 바로 이 문제를 해결한 예시다.

"그녀는 "누구세요"라고 했습니다." ↑ ↑ ↑ 시작 여기서 끝난 걸로 착각! → 구문 오류(SyntaxError) "그녀는 \"누구세요\"라고 했습니다." ↑ ↑ 백슬래시(\)가 "이 따옴표는 그냥 글자야"라고 알려줌 → 정상 출력

이렇게 백슬래시(\)를 따옴표 앞에 붙여서 "이건 문자열을 끝내는 기호가 아니라 그냥 글자다"라고 알려주는 것을 이스케이프(escape)라고 부른다.

※ 이스케이프를 피하는 다른 방법
  • 바깥을 큰따옴표로, 안쪽은 작은따옴표로 — "그녀는 '누구세요'라고 했습니다."
  • 템플릿 리터럴(백틱 `) 사용 — `그녀는 "누구세요"라고 했습니다.`
  • 어느 방법이든 "따옴표 종류를 다르게 쓰거나, 이스케이프로 알려준다"는 원리는 같다

8 숫자 앞 0 함정 — 의도치 않은 8진수
그냥 자릿수 맞추려고 0을 붙였다가 값이 바뀐다

초보자가 가장 자주 걸리는 함정이 이것이다. 우편번호나 학번처럼 앞자리가 0으로 시작하는 숫자를 다루다가, 별생각 없이 let zip = 015;처럼 써버리면 이 값은 문자열이 아니라 숫자 리터럴로 취급되어 8진수로 해석된다. 결과적으로 저장되는 값은 15가 아니라 13이다.

※ "0으로 시작하는 숫자"를 실제 숫자값 그대로 쓰고 싶다면, 문자열로("015") 감싸거나 애초에 앞자리 0을 빼고 저장해야 한다. 진짜 8진수 계산이 필요할 때만 0 접두사를 의도적으로 쓴다.
※ 참고로 최신 자바스크립트(ES6+)에서는 8진수를 더 명확하게 0o15 (숫자 0 + 알파벳 o)처럼 쓰는 것도 가능하다. 015 같은 옛날식 표기는 헷갈리기 쉬워 점점 덜 권장된다.

9 자주 하는 실수
실수 증상 해결
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")로 저장
작은따옴표·큰따옴표를 코드 안에서 무작위로 혼용 가독성 저하, 팀 컨벤션 위반 프로젝트 전체에서 한 가지 스타일로 통일

핵심 한 줄 요약

리터럴코드에 직접 써넣은 값 그 자체
015 (8진수)앞에 0 → 8진수로 해석 → 십진수 13
0x15 (16진수)앞에 0x → 16진수로 해석 → 십진수 21
true / false불린 리터럴, 대문자 True/False는 오류
' '와 " "둘 다 문자열 — 자바스크립트에서 기능 동일
\" 이스케이프문자열 안에 같은 따옴표를 넣을 때 필수
숫자 앞 0우편번호 등은 문자열로 저장해야 안전

Tags

#JavaScript #리터럴 #8진수 #16진수 #진법 #불린 #boolean #문자열 #이스케이프 #자바스크립트기초 #JS #documentwrite #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
JavaScript, 리터럴, 8진수, 16진수, 진법, 불린, boolean, 문자열, 이스케이프, 자바스크립트기초, JS, documentwrite, 웹개발, 티스토리
반응형

댓글