5장. 연산자
연산자란?
연산자(Operator)는 하나 이상의 값을 연산하여 새로운 값을 만드는 기호입니다. 자바스크립트는 다양한 연산자를 제공합니다.
1. 산술 연산자 (Arithmetic Operators)
수학적 계산을 수행하는 연산자입니다.
기본 산술 연산자
let a = 10;
let b = 3;
console.log(a + b); // 13 (덧셈)
console.log(a - b); // 7 (뺄셈)
console.log(a * b); // 30 (곱셈)
console.log(a / b); // 3.333... (나눗셈)
console.log(a % b); // 1 (나머지)
console.log(a ** b); // 1000 (거듭제곱, ES6+)
증감 연산자 (Increment/Decrement)
let x = 10;
// 후위 증가 (Post-increment)
console.log(x++); // 10 (출력 후 증가)
console.log(x); // 11
// 전위 증가 (Pre-increment)
let y = 10;
console.log(++y); // 11 (증가 후 출력)
console.log(y); // 11
// 후위 감소 (Post-decrement)
let z = 10;
console.log(z--); // 10 (출력 후 감소)
console.log(z); // 9
// 전위 감소 (Pre-decrement)
let w = 10;
console.log(--w); // 9 (감소 후 출력)
console.log(w); // 9
2. 할당 연산자 (Assignment Operators)
변수에 값을 할당하는 연산자입니다.
let x = 10; // 기본 할당
x += 5; // x = x + 5 (15)
x -= 3; // x = x - 3 (12)
x *= 2; // x = x * 2 (24)
x /= 4; // x = x / 4 (6)
x %= 4; // x = x % 4 (2)
x **= 3; // x = x ** 3 (8)
console.log(x); // 8
3. 비교 연산자 (Comparison Operators)
두 값을 비교하여 불린 값을 반환합니다.
동등 연산자
// == (느슨한 비교, 타입 변환 후 비교)
console.log(10 == '10'); // true (타입 변환)
console.log(10 == 10); // true
console.log(null == undefined); // true
// === (엄격한 비교, 타입과 값 모두 비교) - 권장
console.log(10 === '10'); // false (타입이 다름)
console.log(10 === 10); // true
console.log(null === undefined); // false
// != (느슨한 비교, 같지 않음)
console.log(10 != '10'); // false
// !== (엄격한 비교, 같지 않음) - 권장
console.log(10 !== '10'); // true
⚠️ 중요: ===와 !== 사용을 권장합니다!
대소 비교 연산자
console.log(10 > 5); // true (크다)
console.log(10 < 5); // false (작다)
console.log(10 >= 10); // true (크거나 같다)
console.log(10 <= 5); // false (작거나 같다)
문자열 비교
console.log('apple' < 'banana'); // true (사전 순서)
console.log('a' < 'A'); // false (대문자가 먼저)
console.log('10' > '2'); // false (문자열 비교)
4. 논리 연산자 (Logical Operators)
불린 값을 다루는 연산자입니다.
AND 연산자 (&&)
// 둘 다 true일 때만 true
console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && false); // false
// 실용적인 예제
let age = 20;
let hasLicense = true;
if (age >= 18 && hasLicense) {
console.log('운전 가능');
}
OR 연산자 (||)
// 하나라도 true이면 true
console.log(true || true); // true
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
// 실용적인 예제
let isWeekend = false;
let isHoliday = true;
if (isWeekend || isHoliday) {
console.log('휴일입니다');
}
NOT 연산자 (!)
// true를 false로, false를 true로
console.log(!true); // false
console.log(!false); // true
// 실용적인 예제
let isLoggedIn = false;
if (!isLoggedIn) {
console.log('로그인이 필요합니다');
}
단락 평가 (Short-circuit Evaluation)
// && 연산자: 첫 번째가 false면 두 번째 평가 안 함
let result1 = false && console.log('실행 안 됨');
// || 연산자: 첫 번째가 true면 두 번째 평가 안 함
let result2 = true || console.log('실행 안 됨');
// 기본값 설정
let name = '';
let displayName = name || '익명'; // '익명'
console.log(displayName);
5. 삼항 연산자 (Ternary Operator)
조건에 따라 값을 선택하는 연산자입니다.
// 형식: 조건 ? 값1 : 값2
let age = 20;
let status = age >= 18 ? '성인' : '미성년자';
console.log(status); // '성인'
// 중첩 사용
let score = 85;
let grade = score >= 90 ? 'A' :
score >= 80 ? 'B' :
score >= 70 ? 'C' : 'F';
console.log(grade); // 'B'
6. 타입 연산자
typeof 연산자
console.log(typeof 10); // "number"
console.log(typeof 'hello'); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function(){}); // "function"
instanceof 연산자
let arr = [1, 2, 3];
let obj = {};
console.log(arr instanceof Array); // true
console.log(obj instanceof Object); // true
console.log(arr instanceof Object); // true
7. 연산자 우선순위
여러 연산자가 함께 사용될 때 실행 순서를 결정합니다.
// 괄호가 가장 높은 우선순위
let result1 = (10 + 5) * 2; // 30
let result2 = 10 + 5 * 2; // 20
// 연산자 우선순위 (높은 순서대로)
// 1. 괄호 ()
// 2. 증감 연산자 ++, --
// 3. 곱셈, 나눗셈, 나머지 *, /, %
// 4. 덧셈, 뺄셈 +, -
// 5. 비교 연산자 <, >, <=, >=
// 6. 동등 연산자 ==, ===, !=, !==
// 7. 논리 AND &&
// 8. 논리 OR ||
// 9. 할당 연산자 =, +=, -= 등
우선순위 예제
let a = 10;
let b = 5;
let c = 2;
let result = a + b * c; // 20 (곱셈 먼저)
let result2 = (a + b) * c; // 30 (괄호 먼저)
let result3 = a > b && b > c; // true (비교 먼저, 그 다음 AND)
8. 문자열 연산자
연결 연산자 (+)
let str1 = 'Hello';
let str2 = 'World';
console.log(str1 + ' ' + str2); // "Hello World"
// 숫자와 문자열
console.log('10' + 5); // "105" (문자열 연결)
console.log(10 + '5'); // "105" (문자열 연결)
console.log('10' - 5); // 5 (숫자 연산)
연산자 종합 예제
// 산술 연산
let a = 10;
let b = 3;
console.log(a + b); // 13
console.log(a % b); // 1
// 할당 연산
let count = 0;
count += 5; // count = 5
count++; // count = 6
// 비교 연산
let age = 20;
console.log(age >= 18); // true
console.log(age === 20); // true
// 논리 연산
let hasLicense = true;
let isAdult = age >= 18;
console.log(hasLicense && isAdult); // true
// 삼항 연산
let status = age >= 18 ? '성인' : '미성년자';
console.log(status); // '성인'
// 복합 연산
let score = 85;
let grade = score >= 90 ? 'A' :
score >= 80 ? 'B' : 'C';
console.log(grade); // 'B'
주의사항
1. == vs ===
// == (느슨한 비교) - 사용 지양
console.log(10 == '10'); // true (타입 변환)
console.log(null == undefined); // true
// === (엄격한 비교) - 권장
console.log(10 === '10'); // false
console.log(null === undefined); // false
2. NaN 비교
let result = 'hello' - 5;
console.log(result === NaN); // false (주의!)
console.log(isNaN(result)); // true
console.log(Number.isNaN(result)); // true (권장)
3. 부동소수점 연산
console.log(0.1 + 0.2); // 0.30000000000000004 (미세한 오차)
// 해결 방법
let sum = (0.1 * 10 + 0.2 * 10) / 10;
console.log(sum); // 0.3
4. 문자열과 숫자 연산
console.log('10' + 5); // "105" (문자열 연결)
console.log('10' - 5); // 5 (숫자 연산)
console.log('10' * 5); // 50 (숫자 연산)
console.log('10' / 5); // 2 (숫자 연산)
연습 문제
산술 연산
- 두 수를 변수에 저장하고, 합, 차, 곱, 나눗셈, 나머지를 계산하세요.
비교 연산
- 나이를 변수에 저장하고, 18세 이상인지 확인하는 코드를 작성하세요.
논리 연산
- 점수가 60점 이상이고 출석률이 80% 이상일 때 합격으로 판단하는 코드를 작성하세요.
삼항 연산
- 점수에 따라 등급을 부여하는 코드를 작성하세요 (90점 이상 A, 80점 이상 B, 그 외 C).
복합 연산
- 초기값이 0인 변수를 만들고, 5를 더한 후 2를 곱한 결과를 출력하세요.
다음 장 예고
다음 장에서는 조건문(if, else, switch)에 대해 학습합니다.
'FrontEnd > Javascript' 카테고리의 다른 글
| 7장. 반복문 (0) | 2026.01.07 |
|---|---|
| 6장. 조건문 (0) | 2026.01.06 |
| 3장. 변수와 상수 (0) | 2026.01.05 |
| 4장. 데이터 타입 (0) | 2025.12.30 |
| 2장. 자바스크립트 실행 환경 (0) | 2025.12.30 |