본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

JavaScript 대입·조건 연산자 완전 정리

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

 

 

Web Development · JavaScript

JavaScript 대입 · 조건 연산자 완전 정리

복합 대입 연산자(+=, *=, %=)와 삼항 연산자(조건 ? 참값 : 거짓값)로 코드를 짧게 쓰는 법
시작 오늘 분석할 코드

두 개의 짧은 예제를 함께 본다. 첫 번째는 +=, *=, %= 같은 복합 대입 연산자이고, 두 번째는 조건에 따라 값을 골라내는 삼항 연산자다. 둘 다 "이미 아는 문법을 더 짧게 쓰는 방법"이라는 공통점이 있다.

① 대입 연산 — 대입연산 23745d82bd838098955dcea90c524984.md
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>대입 연산</title></head> <body> <h3>대입 연산</h3> <hr> <script> let x=3, y=3, z=3; document.write("x=" + x + ", y=" + y); document.write(", z=" + z + "<br><br>"); x += 3; // x=x+3 -> x=6 y *= 3; // y=y*3 -> y=9 z %= 2; // z=z%2 -> z=1 document.write("x += 3; 실행 후, x=" + x + "<br>"); document.write("y *= 3; 실행 후, y=" + y + "<br>"); document.write("z %= 2; 실행 후, z=" + z); </script> </body> </html>
② 조건 연산 — 조건연산 23745d82bd838039a26cd59f63daa7c8.md
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>조건 연산</title></head> <body> <h3>조건 연산</h3> <hr> <script> let a=3, b=5; document.write("a=" + a + ", b=" + b + "<br><br>"); document.write("두수의 차이 : " + ((a>b)?(a-b):(b-a))); </script> </body> </html>
실제 출력 미리보기

x=3, y=3, z=3

x += 3; 실행 후, x=6

y *= 3; 실행 후, y=9

z %= 2; 실행 후, z=1


a=3, b=5

두수의 차이 : 2

용어 용어 정리
=대입 연산자 — 오른쪽 값을 왼쪽 변수에 "저장"
+=복합 대입 — x = x + 3 을 줄인 표현
*=복합 대입 — y = y * 3 을 줄인 표현
%=복합 대입 — z = z % 2 를 줄인 표현
%나머지 연산자 — 나눈 후 남는 값
? :삼항 연산자 — 조건에 따라 값 하나 선택
조건식참(true)/거짓(false)으로 판정되는 식
document.write문서에 문자열을 그대로 출력하는 함수

1 대입 연산자 = — 수학의 등호가 아니다
왜 "저장"으로 이해해야 하는가?

수학에서 x = x + 3은 성립할 수 없는 식이다(양변이 같을 수 없으니까). 하지만 JS에서는 매우 자연스러운 문장이다. 여기서 =는 "같다"가 아니라 "오른쪽을 계산해서 왼쪽 상자에 넣어라"는 명령이기 때문이다. 오른쪽이 먼저 계산되고, 그 결과가 왼쪽 변수에 저장된다.

x = x + 3을 읽는 순서: ① 오른쪽 x + 3을 먼저 계산(현재 x=3이면 6) → ② 그 결과 6을 왼쪽 x에 다시 저장. 그래서 실행 후 x는 6이 된다.

2 += — x=x+3 의 축약인 이유
왜 굳이 줄여 쓰는가?

x += 3x = x + 3완전히 같은 동작을 하는 축약 문법이다. "같은 변수를 오른쪽에도, 왼쪽에도 다시 쓰는" 패턴이 프로그래밍에서 너무 자주 나오기 때문에, 언어 차원에서 짧게 쓰는 방법을 마련해 둔 것이다. 변수 이름을 두 번 안 써도 되니 오타 위험도 줄어든다.

x = x + 3; // 원래 표현 — x를 두 번 씀 x += 3; // 축약 표현 — x를 한 번만 씀 → 두 줄의 실행 결과는 100% 동일하다
※ 복합 대입 연산자 패밀리
  • += 더하고 대입, -= 빼고 대입
  • *= 곱하고 대입, /= 나누고 대입
  • %= 나머지 구하고 대입
  • 모두 "왼쪽 = 왼쪽 (연산자) 오른쪽" 구조를 줄인 것

3 *= 와 %= — 곱셈과 나머지
%(나머지 연산자)는 무엇을 계산하는가?

y *= 3y = y * 3과 같아서 3×3=9가 된다. z %= 2z = z % 2와 같은데, %는 "나눈 몫이 아니라 나눈 후 남는 값"을 돌려준다. z가 3이었으니 3 ÷ 2 = 1...나머지 1, 그래서 z는 1이 된다.

z = 3, z %= 2 실행 → 3 ÷ 2 = 몫 1, 나머지 1 → z % 2 의 결과는 "나머지"인 1 → z = 1
%의 대표적인 활용: 짝수/홀수 판별(n % 2 === 0), 배열을 순환시키는 인덱스 계산, 시/분/초 변환 등 "나눠떨어지지 않고 남는 값"이 필요한 모든 곳에 쓰인다.

 

반응형

 

4 코드가 실행되는 순서
브라우저는 위에서부터 한 줄씩 처리한다

대입 연산 예제가 실행되는 순서를 단계별로 보면 +=, *=, %=가 어떻게 값을 바꾸는지 더 명확해진다.

1
let x=3, y=3, z=3;세 변수를 모두 3으로 초기화
2
document.write로 초기값 출력"x=3, y=3, z=3" 화면에 표시
3
x += 3 실행x = x + 3 계산 → x는 6으로 갱신
4
y *= 3 실행y = y * 3 계산 → y는 9로 갱신
5
z %= 2 실행z = z % 2 계산(나머지) → z는 1로 갱신
6
갱신된 값 출력"x=6", "y=9", "z=1" 순서대로 화면에 표시
※ 핵심은 대입은 항상 오른쪽이 먼저 계산되고 그 결과가 왼쪽에 저장된다는 것이다. 이 순서를 지키기 때문에 x += 3처럼 자기 자신을 다시 쓰는 표현이 문제없이 동작한다.

5 삼항 연산자 — (조건) ? (참값) : (거짓값)
세 개의 항(項)으로 이루어진 연산자

삼항 연산자는 이름 그대로 조건, 참일 때 값, 거짓일 때 값 세 부분으로 구성된다. ? 앞의 식이 참이면 ?: 사이의 값을, 거짓이면 : 뒤의 값을 결과로 돌려주는 식(expression)이다. 문장이 아니라 "값 하나로 계산되는 식"이라는 점이 핵심이다.

조건식
?
참일 때 값
:
거짓일 때 값
(a > b) ? (a - b) : (b - a) a=3, b=5 이므로 (3 > 5)는 거짓 → : 뒤의 값 (b - a) = (5 - 3) = 2 가 결과

6 삼항 = if-else를 한 줄로 줄인 것
왜 if-else 대신 삼항을 쓰는가?

삼항 연산자가 하는 일은 if-else와 똑같다. 차이는 if-else는 "문장(statement)"이라 값을 돌려주지 않고, 삼항은 "식(expression)"이라 그 자리에서 값으로 바로 쓸 수 있다는 점이다. 그래서 변수에 바로 대입하거나 document.write 안에 바로 넣을 수 있다.

if-else (문장)
let diff;
if (a > b) {
  diff = a - b;
} else {
  diff = b - a;
}
→ 5줄, diff는 나중에 씀
삼항 (식)
let diff = (a > b) ? (a - b) : (b - a);

→ 1줄로 끝, 바로 대입 가능
※ 원본 코드의 document.write("두수의 차이 : " + ((a>b)?(a-b):(b-a)))도 마찬가지다. 삼항 연산자가 "식"이기 때문에 문자열과 +로 바로 이어 붙일 수 있는 것이다. if-else였다면 이렇게 한 줄에 넣을 수 없었다.

7 삼항 중첩과 대입 연산자의 반환값
삼항을 겹쳐 쓰면 왜 위험한가?

삼항 연산자 안에 또 삼항을 넣는 중첩(nesting)이 문법적으로는 가능하다. 하지만 a ? b : c ? d : e처럼 괄호 없이 여러 번 중첩하면 어디가 어디에 걸리는지 한눈에 안 보여서 읽는 사람(미래의 나 포함)이 헷갈린다. 조건이 2개를 넘어가면 차라리 if-else로 풀어 쓰는 게 낫다.

score >= 90 ? "A" : score >= 80 ? "B" : "C" — 동작은 하지만 한눈에 읽기 어렵다. 괄호로 score >= 90 ? "A" : (score >= 80 ? "B" : "C")처럼 감싸거나, 조건이 늘어나면 if-else로 바꾸는 게 안전하다.
대입 연산자도 사실 "값"을 돌려준다

부가적으로, x = 5같은 대입식 자체도 대입된 값(5)을 결과로 돌려준다. 그래서 a = b = 5처럼 연쇄 대입이 가능한 것이다(오른쪽부터 계산되어 b=5, 그 다음 a=5). 다만 가독성을 해치니 실무에서는 한 줄에 하나씩 대입하는 것을 권장한다.


8 자주 하는 실수
실수 증상 해결
=== 혼동 비교하려 했는데 값이 바뀌어버림 대입은 =, 비교는 ==/=== 구분
%/ 혼동 나머지를 원했는데 몫이 나옴(또는 반대) /=몫, %=나머지로 암기
삼항에서 괄호 생략으로 우선순위 꼬임 의도와 다른 값이 계산됨 조건식과 각 항을 (조건)?(참):(거짓)처럼 괄호로 묶기
삼항을 여러 번 중첩 남용 코드가 한눈에 안 읽힘 조건 2개 넘으면 if-else로 전환
+==+로 잘못 입력 부호 반전으로 오작동, 에러 없이 조용히 틀림 연산자와 등호 순서(+=) 확인하는 습관

핵심 한 줄 요약

=등호가 아니라 "오른쪽 값을 왼쪽에 저장"하는 대입
+=, *=, %=x=x+3, y=y*3, z=z%2 를 줄여 쓰는 복합 대입
%나눈 후 남는 값 — 몫이 아니라 나머지
(조건)?(참):(거짓)조건에 따라 값 하나를 골라주는 삼항 연산자
삼항 vs if-else삼항은 "식"이라 값을 바로 쓸 수 있음
중첩 주의조건 2개 넘으면 괄호 또는 if-else로 전환

Tags

#JavaScript #대입연산자 #복합대입연산자 #삼항연산자 #조건연산자 #연산자 #plusequal #modulo #나머지연산자 #축약연산자 #ifelse #자바스크립트기초 #JS #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
JavaScript, 대입연산자, 복합대입연산자, 삼항연산자, 조건연산자, 연산자, plusequal, modulo, 나머지연산자, 축약연산자, ifelse, 자바스크립트기초, JS, 웹개발, 티스토리
반응형

댓글