3장. 연산자
연산자란?
연산자(Operator)는 데이터를 처리하여 결과를 도출하는 기호입니다. Java는 다양한 연산자를 제공하여 수학적 계산, 비교, 논리 연산 등을 수행할 수 있습니다.
연산자와 피연산자
- 연산자: 연산을 수행하는 기호 (+, -, *, / 등)
- 피연산자: 연산의 대상이 되는 값 (변수, 상수 등)
int result = 10 + 20; // +는 연산자, 10과 20은 피연산자
산술 연산자 (Arithmetic Operators)
산술 연산자는 수학적 계산을 수행하는 연산자입니다.
기본 산술 연산자
| 연산자 | 의미 | 예시 | 결과 |
|---|---|---|---|
+ |
덧셈 | 5 + 3 |
8 |
- |
뺄셈 | 5 - 3 |
2 |
* |
곱셈 | 5 * 3 |
15 |
/ |
나눗셈 | 10 / 3 |
3 (정수) |
% |
나머지 | 10 % 3 |
1 |
정수 나눗셈 vs 실수 나눗셈
int a = 10;
int b = 3;
int result1 = a / b; // 3 (정수 나눗셈, 소수점 버림)
double result2 = a / b; // 3.0 (정수 나눗셈 후 double로 변환)
double result3 = (double)a / b; // 3.333... (실수 나눗셈)
나머지 연산자 (%)
나머지 연산자는 정수 나눗셈의 나머지를 구합니다.
int remainder1 = 10 % 3; // 1
int remainder2 = 10 % 2; // 0 (짝수 확인)
int remainder3 = 7 % 5; // 2
활용 예시:
- 짝수/홀수 판별:
num % 2 == 0(짝수) - 배수 확인:
num % 3 == 0(3의 배수)
산술 연산자 예제
int a = 10;
int b = 3;
System.out.println("a + b = " + (a + b)); // 13
System.out.println("a - b = " + (a - b)); // 7
System.out.println("a * b = " + (a * b)); // 30
System.out.println("a / b = " + (a / b)); // 3
System.out.println("a % b = " + (a % b)); // 1
비교 연산자 (Comparison Operators)
비교 연산자는 두 값을 비교하여 true 또는 false를 반환합니다.
비교 연산자 종류
| 연산자 | 의미 | 예시 | 결과 |
|---|---|---|---|
== |
같음 | 5 == 5 |
true |
!= |
같지 않음 | 5 != 3 |
true |
> |
큼 | 5 > 3 |
true |
< |
작음 | 5 < 3 |
false |
>= |
크거나 같음 | 5 >= 5 |
true |
<= |
작거나 같음 | 5 <= 3 |
false |
주의사항
==와=의 차이==: 비교 연산자 (같은지 비교)=: 대입 연산자 (값을 할당)
int a = 10;
int b = 10;
if (a == b) { // 올바른 비교
System.out.println("같습니다");
}
// if (a = b) { // 오류! 대입 연산자는 boolean을 반환하지 않음
// }
비교 연산자 예제
int a = 10;
int b = 20;
System.out.println("a == b: " + (a == b)); // false
System.out.println("a != b: " + (a != b)); // true
System.out.println("a > b: " + (a > b)); // false
System.out.println("a < b: " + (a < b)); // true
System.out.println("a >= b: " + (a >= b)); // false
System.out.println("a <= b: " + (a <= b)); // true
논리 연산자 (Logical Operators)
논리 연산자는 논리값(boolean)을 다루는 연산자입니다.
논리 연산자 종류
| 연산자 | 의미 | 설명 | 예시 |
|---|---|---|---|
&& |
AND (논리곱) | 둘 다 true일 때만 true |
true && false → false |
|| |
OR (논리합) | 하나라도 true이면 true |
true || false → true |
! |
NOT (논리부정) | true는 false, false는 true |
!true → false |
논리 연산자 진리표
AND (&&)
| A | B | A && B |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
OR (||)
| A | B | A || B |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
NOT (!)
| A | !A |
|---|---|
| true | false |
| false | true |
단락 평가 (Short-Circuit Evaluation)
&&: 왼쪽이false이면 오른쪽을 평가하지 않음||: 왼쪽이true이면 오른쪽을 평가하지 않음
int a = 10;
int b = 5;
// && 연산자: 첫 번째 조건이 false이면 두 번째 조건을 확인하지 않음
if (a < 5 && b++ > 0) { // a < 5가 false이므로 b++는 실행되지 않음
// 실행되지 않음
}
System.out.println("b = " + b); // b는 여전히 5
// || 연산자: 첫 번째 조건이 true이면 두 번째 조건을 확인하지 않음
if (a > 5 || b++ > 0) { // a > 5가 true이므로 b++는 실행되지 않음
// 실행됨
}
System.out.println("b = " + b); // b는 여전히 5
논리 연산자 예제
boolean a = true;
boolean b = false;
System.out.println("a && b: " + (a && b)); // false
System.out.println("a || b: " + (a || b)); // true
System.out.println("!a: " + (!a)); // false
System.out.println("!b: " + (!b)); // true
// 실용적인 예제
int age = 20;
boolean hasLicense = true;
if (age >= 18 && hasLicense) {
System.out.println("운전 가능");
} else {
System.out.println("운전 불가");
}
대입 연산자 (Assignment Operators)
대입 연산자는 변수에 값을 할당하는 연산자입니다.
기본 대입 연산자
int a = 10; // = 연산자로 값 할당
복합 대입 연산자 (Compound Assignment)
연산과 대입을 동시에 수행하는 연산자입니다.
| 연산자 | 의미 | 동일 표현 | 예시 |
|---|---|---|---|
+= |
더하고 대입 | a = a + b |
a += 5 |
-= |
빼고 대입 | a = a - b |
a -= 5 |
*= |
곱하고 대입 | a = a * b |
a *= 5 |
/= |
나누고 대입 | a = a / b |
a /= 5 |
%= |
나머지를 구하고 대입 | a = a % b |
a %= 5 |
복합 대입 연산자 예제
int a = 10;
a += 5; // a = a + 5; 와 동일, a는 15
a -= 3; // a = a - 3; 와 동일, a는 12
a *= 2; // a = a * 2; 와 동일, a는 24
a /= 4; // a = a / 4; 와 동일, a는 6
a %= 4; // a = a % 4; 와 동일, a는 2
System.out.println("최종 a 값: " + a); // 2
증감 연산자 (Increment/Decrement Operators)
증감 연산자는 변수의 값을 1씩 증가시키거나 감소시키는 연산자입니다.
증감 연산자 종류
| 연산자 | 의미 | 설명 |
|---|---|---|
++ |
증가 | 변수 값을 1 증가 |
-- |
감소 | 변수 값을 1 감소 |
전위(prefix) vs 후위(postfix)
증감 연산자는 변수 앞에 붙이거나 뒤에 붙일 수 있으며, 동작이 다릅니다.
전위 증감 (Prefix)
- 연산 후 사용: 먼저 값을 증가/감소시키고, 그 결과를 사용
int a = 5;
int b = ++a; // a를 먼저 1 증가시킨 후(6), b에 할당
// a = 6, b = 6
후위 증감 (Postfix)
- 사용 후 연산: 먼저 값을 사용하고, 그 다음에 증가/감소
int a = 5;
int b = a++; // a의 현재 값(5)을 b에 할당한 후, a를 1 증가
// a = 6, b = 5
증감 연산자 예제
int a = 5;
// 전위 증가
System.out.println("a = " + a); // 5
System.out.println("++a = " + (++a)); // 6 (먼저 증가 후 출력)
System.out.println("a = " + a); // 6
int b = 5;
// 후위 증가
System.out.println("b = " + b); // 5
System.out.println("b++ = " + (b++)); // 5 (출력 후 증가)
System.out.println("b = " + b); // 6
// 감소 연산자도 동일
int c = 5;
int d = --c; // c = 4, d = 4
int e = 5;
int f = e--; // e = 4, f = 5
주의사항
int a = 5;
int b = a++ + ++a; // 복잡하고 혼란스러움, 피하는 것이 좋음
// 권장: 명확하게 작성
int a = 5;
int temp1 = a++; // temp1 = 5, a = 6
int temp2 = ++a; // a = 7, temp2 = 7
int b = temp1 + temp2; // b = 12
연산자 우선순위 (Operator Precedence)
여러 연산자가 함께 사용될 때, 어떤 연산을 먼저 수행할지 결정하는 규칙입니다.
우선순위 순서 (높은 순서부터)
- 괄호
()- 최우선 - 증감 연산자
++,--(전위) - 단항 연산자
+,-,! - 산술 연산자
*,/,%→+,- - 비교 연산자
<,>,<=,>= - 등가 연산자
==,!= - 논리 연산자
&&→|| - 대입 연산자
=,+=,-=, 등
우선순위 예제
int result1 = 2 + 3 * 4; // 14 (곱셈 먼저)
int result2 = (2 + 3) * 4; // 20 (괄호 먼저)
int result3 = 10 / 2 + 3; // 8 (나눗셈 먼저)
int result4 = 10 / (2 + 3); // 2 (괄호 먼저)
boolean result5 = 5 > 3 && 2 < 4; // true (비교 연산자 먼저)
boolean result6 = 5 > 3 || 2 > 4; // true (비교 연산자 먼저)
가독성을 위한 괄호 사용
복잡한 표현식에서는 괄호를 사용하여 의도를 명확히 하는 것이 좋습니다.
// 혼란스러운 코드
int result = a + b * c / d - e;
// 명확한 코드
int result = a + (b * c / d) - e;
// 또는 더 명확하게
int result = a + ((b * c) / d) - e;
연산자 종합 예제
public class OperatorExample {
public static void main(String[] args) {
int a = 10;
int b = 3;
// 산술 연산
System.out.println("=== 산술 연산 ===");
System.out.println("a + b = " + (a + b));
System.out.println("a - b = " + (a - b));
System.out.println("a * b = " + (a * b));
System.out.println("a / b = " + (a / b));
System.out.println("a % b = " + (a % b));
// 비교 연산
System.out.println("\n=== 비교 연산 ===");
System.out.println("a > b: " + (a > b));
System.out.println("a < b: " + (a < b));
System.out.println("a == b: " + (a == b));
// 논리 연산
System.out.println("\n=== 논리 연산 ===");
boolean x = true;
boolean y = false;
System.out.println("x && y: " + (x && y));
System.out.println("x || y: " + (x || y));
// 증감 연산
System.out.println("\n=== 증감 연산 ===");
int c = 5;
System.out.println("c = " + c);
System.out.println("++c = " + (++c));
System.out.println("c++ = " + (c++));
System.out.println("c = " + c);
// 복합 대입
System.out.println("\n=== 복합 대입 ===");
int d = 10;
d += 5;
System.out.println("d += 5: " + d);
}
}
연습 문제
- 산술 연산자
- 두 정수를 입력받아 사칙연산과 나머지를 계산하는 프로그램을 작성하세요.
- 비교 연산자
- 나이를 입력받아 성인(18세 이상) 여부를 판단하는 프로그램을 작성하세요.
- 논리 연산자
- 점수를 입력받아 60점 이상 100점 이하인지 확인하는 프로그램을 작성하세요.
- 증감 연산자
- 전위와 후위 증감 연산자의 차이를 보여주는 예제를 작성하세요.
- 연산자 우선순위
- 다음 식의 결과를 계산하고, 괄호를 사용하여 우선순위를 명확히 하세요:
result = 10 + 5 * 2 - 3 / 1
- 다음 식의 결과를 계산하고, 괄호를 사용하여 우선순위를 명확히 하세요:
다음 장 예고
다음 장에서는 조건문(if, switch)을 사용하여 프로그램의 흐름을 제어하는 방법을 학습합니다.
'BackEnd > Java' 카테고리의 다른 글
| 5장. 배열과 문자열 (0) | 2025.12.30 |
|---|---|
| 4장. 제어문 (0) | 2025.12.30 |
| 2장. 변수와 자료형 (0) | 2025.12.28 |
| 1장. Java 시작하기 (0) | 2025.12.26 |
| 0장. VSCode에 자바 설치하기 (0) | 2025.12.26 |