본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

JavaScript 산술 연산 — +·-·*·/·% 완전 정리

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

 

 

Web Development · JavaScript

JavaScript 산술 연산 —
우선순위와 나머지 완전 정리

+ - * / % 다섯 연산자와 계산 순서를 정하는 우선순위 규칙
시작 오늘 분석할 코드

변수 하나(x = 32)를 가지고 네 가지 계산을 해 보는 코드다. 겉보기엔 단순한 사칙연산인데, 실행해 보면 "왜 결과가 이렇게 나오지?" 싶은 지점이 두 곳 있다. total이 113이 되는 계산 순서, 그리고 div가 정수가 아니라 3.2라는 소수로 나오는 이유다.

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>산술연산</title></head> <body> <h3>산술연산</h3> <hr> <script> let x=32; let total = 100 + x*2/4 - 3; // total은 113 let div = x / 10; // div는 3.2 let mod = x % 2; // x를 2로 나눈 나머지, 0 document.write("x : " + x + "<br><br>"); document.write("100 + x*2/4 - 3 = " + total + "<br>"); document.write("x/10 = " + div + "<br>"); document.write("x%2 = " + mod + "<br>"); </script> </body> </html>
실제 출력 미리보기
x : 32

100 + x*2/4 - 3 = 113
x/10 = 3.2
x%2 = 0
※ 결과를 미리 보면: total = 113(정수), div = 3.2(소수), mod = 0(짝수라서 나머지 없음). 이 세 결과가 어떻게 나오는지 하나씩 뜯어본다.
용어 용어 정리
산술 연산자숫자를 계산하는 기호. +, -, *, /, % 다섯 개
연산자 우선순위한 줄에 연산자가 여럿일 때 먼저 계산되는 순서
결합 법칙우선순위가 같을 때 왼쪽부터 계산하는 규칙
%(나머지)나눗셈을 하고 남는 값만 뽑아내는 연산자
실수(float)3.2처럼 소수점이 있는 숫자
Number 타입JS가 정수·실수를 구분 없이 담는 단일 숫자 타입
document.write()문자열을 웹 페이지 화면에 그대로 출력하는 메서드
let값이 나중에 바뀔 수 있는 변수를 선언하는 키워드

1 산술 연산자 다섯 형제 — + - * / %
왜 연산자가 이 다섯 개뿐인가?

초등학교 산수와 똑같다. 더하기·빼기·곱하기·나누기 네 개에, 프로그래밍에서만 자주 쓰는 나머지(%) 하나가 추가된 것이 전부다. 복잡해 보이는 계산도 결국 이 다섯 기호의 조합일 뿐이다.

연산자 이름 예시 (x=32) 결과
+ 더하기 x + 10 42
- 빼기 x - 10 22
* 곱하기 x * 2 64
/ 나누기 x / 10 3.2
% 나머지 x % 2 0
*는 수학에서 쓰는 ×가 아니고, /÷가 아니다. 키보드에 있는 별표와 슬래시를 그대로 쓴다.

2 연산자 우선순위 — *, / 가 +, - 보다 먼저
왜 왼쪽부터 순서대로 계산하지 않는가?

100 + x*2/4 - 3을 보면 왼쪽부터 "100 더하고, x 곱하고..." 순서로 읽고 싶어진다. 하지만 JS를 포함한 대부분의 프로그래밍 언어와 수학은 곱하기·나누기를 더하기·빼기보다 먼저 계산한다. 수학 시간에 배운 "곱셈과 나눗셈을 먼저 하라"는 규칙이 코드에도 그대로 적용되는 것이다. 이 규칙이 없으면 같은 식이 계산 순서에 따라 완전히 다른 결과를 내서, 모두가 같은 답을 얻을 수 없다.

1
x * 2 부터 계산곱하기가 가장 먼저 → 32 * 2 = 64
2
64 / 4 계산나누기도 곱하기와 같은 우선순위 → 64 / 4 = 16
3
100 + 16 계산남은 건 덧셈·뺄셈뿐 → 100 + 16 = 116
4
116 - 3 계산마지막으로 뺄셈 → 116 - 3 = 113
100 + x*2/4 - 3 → 100 + 64/4 - 3 (x*2 먼저) → 100 + 16 - 3 (64/4 계산) → 116 - 3 (덧셈) → 113 (뺄셈) ✓
※ 우선순위 순서 (높은 것부터)
  • 1순위 — 괄호 ()
  • 2순위 — 곱하기 *, 나누기 /, 나머지 %
  • 3순위 — 더하기 +, 빼기 -

3 괄호로 계산 순서 바꾸기
우선순위를 거스르고 싶을 땐?

가끔은 덧셈을 곱셈보다 먼저 하고 싶을 수 있다. 그럴 때 쓰는 도구가 괄호 ()다. 괄호 안은 우선순위와 상관없이 항상 가장 먼저 계산된다. 즉 계산 순서의 "최종 결정권"은 괄호가 쥐고 있다.

괄호 없음
100 + x*2/4 - 3
→ x*2/4 먼저 → 113
괄호로 순서 강제
(100 + x) * 2 / (4-3)
→ 괄호부터 → 264
※ 만약 원본 코드가 "100과 x를 먼저 더한 값에 2를 곱하고 싶다"는 의도였다면, 괄호 없이 쓴 100 + x*2/4 - 3은 의도와 다른 값(113)을 낸다. 원하는 계산 순서가 우선순위와 다르면 반드시 괄호를 써야 한다.

 

반응형

 

4 나눗셈은 항상 실수를 낸다 — x / 10 = 3.2
왜 32 나누기 10이 3이 아니라 3.2인가?

다른 언어(Java, C 등)는 정수(int)와 실수(float)를 구분해서, 정수끼리 나누면 몫만 남기고 소수점을 버려 32/10 = 3이 되기도 한다. 하지만 JavaScript는 숫자 타입이 Number 하나뿐이다. 정수든 실수든 구분하지 않고 똑같이 취급하기 때문에, 나눗셈이 딱 떨어지지 않으면 소수점까지 그대로 계산해서 보여준다. 그래서 x / 10은 몫만 남기지 않고 32 / 10 = 3.2라는 실수 결과가 자연스럽게 나온다.

Java, C 등: 32 / 10 → 3 (정수 ÷ 정수 = 정수, 소수점 버림) JavaScript: 32 / 10 → 3.2 (숫자 타입이 하나라 소수점까지 계산)
※ 정수만 필요하다면?
  • Math.floor(x / 10) — 소수점 이하를 버림 → 3
  • Math.round(x / 10) — 반올림 → 3
  • parseInt(x / 10) — 문자열처럼 정수 부분만 추출 → 3

5 % 나머지 연산의 쓰임 — 짝수/홀수 판별
나머지가 왜 필요한가?

%는 나눗셈을 하되 몫이 아니라 "나눠떨어지지 않고 남는 값"만 돌려준다. x % 2는 x를 2로 나눈 나머지이므로 결과는 항상 0 아니면 1이다. 32는 2로 나누어떨어지는 짝수라서 x % 2 = 0이 나온 것이다. 이 성질 덕분에 % 연산자는 실무에서 짝수/홀수 판별, 순환(캐러셀), 시:분:초 변환 등에 자주 쓰인다.

결과 의미
32 % 2 0 짝수 (나머지 없음)
33 % 2 1 홀수 (나머지 1)
10 % 3 1 10 = 3*3 + 1
※ 실무 패턴: if (num % 2 === 0) { 짝수 처리 } — 게시판 목록 배경색 번갈아 칠하기, 5줄마다 구분선 넣기 등에 % 가 항상 등장한다.

6 왼쪽에서 오른쪽으로 — 연산자 결합 방향
우선순위가 같으면 어느 쪽부터?

x*2/4처럼 같은 우선순위의 연산자가 나란히 있으면 왼쪽에서 오른쪽 순서로 계산한다. 이걸 "왼쪽 결합(left-to-right associativity)"이라 부른다. x*2/4x*(2/4)가 아니라 (x*2)/4로 계산되는데, 곱하기와 나누기가 같은 우선순위이기 때문에 먼저 나온 곱하기부터 처리하는 것이다. 뒤쪽의 100 + 16 - 3도 마찬가지로 더하기와 빼기가 같은 우선순위라서 왼쪽의 덧셈부터 처리된다.

x*2/4 → (x*2)/4 ✓ 왼쪽 곱하기 먼저 x*2/4 → x*(2/4) ✗ 오른쪽부터 계산하면 다른 값이 나올 수 있음 100+16-3 → (100+16)-3 = 113 ✓ 100+16-3 → 100+(16-3) = 113 (덧셈뺄셈은 결과가 같아도 계산 순서는 왼쪽 우선)
※ 곱하기·나누기처럼 결과가 서로 영향받는 연산(예: 나눗셈 순서를 바꾸면 값이 달라짐)에서는 왼쪽 결합 규칙을 모르면 예상과 다른 값을 얻기 쉽다. 헷갈릴 땐 괄호로 순서를 눈에 보이게 적어주는 게 안전하다.

7 자주 하는 실수
실수 증상 해결
왼쪽부터 순서대로 계산한다고 오해 100 + x*2/4 - 3을 (100+x)*2/4-3처럼 잘못 암산 *, / 가 +, - 보다 먼저라는 우선순위 규칙 암기
x / 10이 정수(3)로 나올 거라 기대 Java·C 습관대로 소수점이 사라질 거라 착각 → 실제론 3.2 JS는 Number 타입 하나 — 정수 필요하면 Math.floor() 사용
음수에 % 연산 사용 시 부호 오해 -7 % 2가 1일 거라 예상했는데 -1이 나옴 JS의 %는 나머지 부호가 피제수(왼쪽 값)를 따른다는 점 확인
계산 순서를 바꾸고 싶은데 괄호를 안 씀 의도한 값과 다른 결과가 나옴 우선순위와 다른 순서가 필요하면 반드시 ()로 감싸기
+ 연산자를 문자열 연결로 착각해 숫자 계산이 깨짐 "x : " + x는 되지만 x + "10"은 문자열 붙이기가 됨 + 양쪽에 문자열이 하나라도 있으면 연결, 둘 다 숫자여야 덧셈

핵심 한 줄 요약

산술 연산자 5종+ - * / % — 더하기·빼기·곱하기·나누기·나머지
우선순위*, /, % 가 +, - 보다 먼저 계산됨
결합 법칙우선순위가 같으면 왼쪽에서 오른쪽으로 계산
괄호 ()우선순위를 무시하고 가장 먼저 계산시키는 도구
/ 나눗셈JS는 Number 타입 하나라 소수점까지 그대로 계산 (3.2)
% 나머지짝수/홀수 판별 등 나눠떨어지는지 확인할 때 사용
100+x*2/4-3x*2 → /4 → +100 → -3 순서로 계산해 113

Tags

#JavaScript #산술연산 #연산자 #사칙연산 #나머지연산 #modulo #연산자우선순위 #실수 #자바스크립트기초 #JS #결합법칙 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
JavaScript, 산술연산, 연산자, 사칙연산, 나머지연산, modulo, 연산자우선순위, 실수, 자바스크립트기초, JS, 결합법칙, 웹개발, 티스토리
반응형

댓글