본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

JavaScript 비교·논리 연산자 완전 정리

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

 

 

Web Development · JavaScript

JavaScript 비교 · 논리 연산자
완전 정리

비교(==, !=, >=, >, <=, <)로 true/false를 얻고, 논리(&&, ||, !)로 조건을 결합하는 법
시작 오늘 분석할 코드

이번 글은 두 개의 원본 코드를 함께 본다. 하나는 비교 연산자(==, !=, >=, >, <=, <)로 두 값을 비교해 true/false를 얻는 코드고, 다른 하나는 그렇게 얻은 true/false논리 연산자(&&, ||, !)로 묶는 코드다. 두 개가 한 세트인 이유는, 논리 연산자가 다루는 재료 자체가 비교 연산자가 만들어낸 boolean이기 때문이다.

① 비교 연산 원본 코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>비교 연산</title></head> <body> <h3>비교 연산</h3> <hr> <script> let x=13, y=7; document.write("x=" + x + ", y=" + y + "<br><br>"); document.write("x == y : " + (x == y) + "<br>"); document.write("x != y : " + (x != y) + "<br>"); document.write("x >= y : " + (x >= y) + "<br>"); document.write("x > y : " + (x > y) + "<br>"); document.write("x <= y : " + (x <= y) + "<br>"); document.write("x < y : " + (x < y) + "<br>"); </script> </body> </html>
② 논리 연산 원본 코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>논리 연산</title></head> <body> <h3>논리 연산</h3> <hr> <script> let x=true; y=false; document.write("x=" + x + ", y=" + y + "<br><br>"); document.write("x && y : "+ (x&&y) +"<br>"); document.write("x || y : "+ (x||y) +"<br>"); document.write("!x : " + (!x) +"<br>"); document.write("<hr>"); document.write("(3>2) && (3<4) : " + ((3>2)&&(3<4)) + "<br>"); document.write("(3==-2) || (-1<0) : " + ((3==2)||(-1<0))); </script> </body> </html>
※ 원본 코드의 두 가지 흠을 미리 짚고 간다. ① let x=true; y=false;에서 y에는 let이 빠져 있다 — 이러면 y는 지역 변수가 아니라 전역 변수로 새어나간다(strict mode에서는 아예 에러). ② 마지막 줄의 화면 출력 문자열은 "(3==-2) || ..."라고 써놨지만 실제 계산은 (3==2)다 — 사람이 읽는 글자와 실제 실행되는 코드가 다르게 짜여 있는 흔한 실수다.
실제 출력 미리보기
x=13, y=7

x == y : false
x != y : true
x >= y : true
x > y : true
x <= y : false
x < y : false
x=true, y=false

x && y : false
x || y : true
!x : false
(3>2) && (3<4) : true
(3==2) || (-1<0) : true
용어 용어 정리
비교 연산자두 값을 견줘 true/false를 반환하는 연산자
논리 연산자여러 개의 true/false를 하나로 묶는 연산자
booleantrue 또는 false만 갖는 자료형
==값이 같은지 비교(타입은 안 따짐)
===값+타입까지 같은지 비교(엄격 비교)
&&AND — 양쪽 다 true여야 true
||OR — 하나라도 true면 true
!NOT — true/false를 뒤집음
단축 평가앞쪽만 봐도 결과가 정해지면 뒤는 안 봄
조건문if 등에서 true/false로 실행 여부를 정함

1 비교 연산자 — true/false를 만드는 기계
왜 비교 연산이 필요한가?

컴퓨터는 사람처럼 "대충 비슷하다"를 모른다. 코드가 갈림길에서 어느 쪽으로 갈지 정하려면, 모든 판단은 결국 true 아니면 false 딱 두 개로 좁혀져야 한다. 비교 연산자는 xy 같은 값을 넣으면 그 관계를 boolean 하나로 압축해주는 도구다. x > y는 숫자가 아니라 "참이다" 또는 "거짓이다"라는 대답 그 자체다.

x > y 는 계산 결과가 아니라 질문에 대한 대답이다. "x가 y보다 크니?" → true 또는 false.

2 == 동등 비교 — 값만 보고 판단
== 은 어떤 기준으로 같다고 하는가?

==는 두 값의 겉모습(값)만 보고 같은지 비교한다. 타입이 달라도 자바스크립트가 알아서 타입을 맞춰본 뒤(형변환) 비교하기 때문에, "7" == 7true가 나온다. 반면 ===는 값은 물론 타입까지 같아야 true다.

== (느슨한 비교)
값만 비교, 타입은 자동 변환
"7" == 7 → true
=== (엄격한 비교)
값+타입 모두 비교
"7" === 7 → false
※ 이번 원본 코드의 x == y(13 vs 7)는 둘 다 숫자라 형변환이 끼어들 여지가 없어서 =====든 결과가 같다. 하지만 습관적으로는 실무에서 === 을 기본으로 쓰는 것이 안전하다.

3 != 같지 않음 비교
!= 는 == 의 정반대

!===의 결과를 그대로 뒤집는다고 생각하면 쉽다. x == y가 false면 x != y는 true다. 느낌표(!)가 "아니다, 부정"의 의미를 갖는다는 걸 기억해두면, 뒤에 나올 논리 연산자 !(NOT)도 자연스럽게 이해된다.

x=13, y=7 x == y → false (13은 7이 아니므로) x != y → true (같지 않은 게 맞으므로)

 

반응형

 

4 >=, >, <=, < — 대소 비교 4형제
부등호에 등호가 붙고 안 붙고의 차이

이 네 연산자는 숫자의 크고 작음을 비교한다. 헷갈리기 쉬운 부분은 등호가 붙어있으면 "같은 경우도 포함"이라는 점이다. x >= y는 "x가 y보다 크거나, 최소한 같다"까지 true로 인정한다.

연산자 의미 x=13, y=7일 때
x >= y x가 y보다 크거나 같다 true
x > y x가 y보다 크다 true
x <= y x가 y보다 작거나 같다 false
x < y x가 y보다 작다 false
※ 등호(=)가 있는 >=, <=는 "이상", "이하" / 등호가 없는 >, <는 "초과", "미만"에 대응한다.

5 논리 연산자가 필요한 이유
비교 하나로는 부족할 때

"성인이면서 회원인가?", "할인쿠폰이 있거나 VIP인가?" 같은 조건은 비교 하나로는 표현이 안 된다. 여러 개의 true/false를 동시에 만족해야 하는지(AND), 하나만 만족해도 되는지(OR)를 결정해주는 것이 논리 연산자다. 재료가 비교 연산자가 만든 boolean이라는 점이 핵심이다.

비교 → true/false
논리 연산자로 결합
최종 true/false

6 && AND — 둘 다 참이어야 참
&& 는 얼마나 엄격한가?

&&는 양쪽 조건이 모두 true일 때만 true를 준다. 하나라도 false면 결과는 무조건 false다. 원본 코드의 x=true, y=false에서 x && y가 false인 이유는 y 하나가 false이기 때문이다.

x y x && y
true true true
true false false
false true false
false false false

7 || OR — 하나만 참이어도 참
|| 는 얼마나 관대한가?

||는 양쪽 중 하나라도 true면 true다. 둘 다 false일 때만 false가 된다. x=true, y=false에서 x || y가 true인 이유는 x 하나만 true여도 충분하기 때문이다.

x y x || y
true true true
true false true
false true true
false false false
※ &&는 "둘 다"를 요구하는 깐깐한 연산자, ||는 "하나만이라도"면 통과시키는 너그러운 연산자라고 대비해서 외우면 헷갈리지 않는다.

8 ! NOT — 참/거짓 뒤집기
! 는 왜 단항 연산자인가?

!는 지금까지와 달리 값 하나만 받아서 그 boolean을 반대로 뒤집는다(단항 연산자). x=true일 때 !x는 false다. "if 조건이 아닐 때" 같은 표현을 만들 때 자주 쓰인다.

x = true !x → false (true를 뒤집음) x = false !x → true (false를 뒤집음)

9 비교 + 논리 결합, 그리고 단축 평가
(3>2) && (3<4) 는 어떻게 계산되는가?

괄호로 감싼 비교식은 먼저 각각 true/false로 계산된 다음, 바깥의 논리 연산자가 그 결과들을 다시 묶는다. 이게 비교 연산과 논리 연산이 짝을 이루는 이유다.

1
(3>2) 계산3은 2보다 크다 → true
2
(3<4) 계산3은 4보다 작다 → true
3
true && true둘 다 true이므로 → 최종 true
4
(3==2) 계산3은 2와 같지 않다 → false
5
(-1<0) 계산-1은 0보다 작다 → true
6
false || true하나가 true이므로 → 최종 true
※ 단축 평가(short-circuit evaluation)
  • &&는 왼쪽이 false면 오른쪽을 아예 계산하지 않는다 — 이미 결과가 false로 확정됐으므로
  • ||는 왼쪽이 true면 오른쪽을 아예 계산하지 않는다 — 이미 결과가 true로 확정됐으므로
  • 실무에서는 user && user.name처럼 "앞이 없으면 뒤를 보지 않는" 안전장치로도 활용한다

결국 if문이 실행할지 말지를 정하는 조건 자리에는 항상 이런 boolean 하나가 들어간다. 비교 연산자로 재료(true/false)를 만들고, 논리 연산자로 그 재료들을 원하는 규칙에 맞게 조립하는 것 — 이것이 조건문의 뼈대다.


10 자주 하는 실수
실수 증상 해결
=== 혼동 비교하려던 자리에서 값이 대입되어 버림 대입은 =, 비교는 ==/===로 구분
===== 혼동 타입이 달라도 몰래 형변환되어 의도치 않게 true 타입까지 정확히 비교하려면 ===·!== 사용
&(비트연산)와 &&(논리연산) 혼동 boolean이 아닌 이상한 숫자 결과가 나옴 조건 결합은 반드시 &&·|| 두 글자로
여러 조건 결합 시 괄호 생략 연산자 우선순위 때문에 의도와 다른 결과 (3>2) && (3<4)처럼 조건마다 괄호로 묶기
변수 선언에서 let 누락(let x=true; y=false;) 두 번째 변수가 전역으로 새어나감 let x=true, y=false;처럼 콤마로 한 번에 선언
출력 문자열과 실제 코드가 다르게 작성됨 화면 라벨과 실제 계산값이 어긋나 디버깅 혼란 document.write 문자열도 실제 식과 항상 맞춰서 작성

핵심 한 줄 요약

비교 연산자==, !=, >=, >, <=, < → 항상 true/false 하나로 대답
== vs =====는 값만, ===는 값+타입까지 비교(실무엔 === 권장)
&& (AND)둘 다 true여야 true — 하나라도 false면 false
|| (OR)하나만 true여도 true — 둘 다 false일 때만 false
! (NOT)true/false를 그대로 뒤집는 단항 연산자
단축 평가결과가 이미 정해지면 나머지 조건은 계산하지 않음
조건문 연결비교로 만든 boolean을 논리 연산자로 묶어 if에 넘김

Tags

#JavaScript #비교연산자 #논리연산자 #AND #OR #NOT #boolean #true/false #조건 #자바스크립트기초 #JS #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
JavaScript, 비교연산자, 논리연산자, AND, OR, NOT, boolean, true/false, 조건, 자바스크립트기초, JS, 웹개발, 티스토리
반응형

댓글