본문 바로가기
  • 코딩, 허쌤이 떠먹여 줄게
BackEnd/Java

3장. 연산자

by 허쌤 2025. 12. 29.

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 && falsefalse
|| OR (논리합) 하나라도 true이면 true true || falsetrue
! NOT (논리부정) truefalse, falsetrue !truefalse

논리 연산자 진리표

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)

여러 연산자가 함께 사용될 때, 어떤 연산을 먼저 수행할지 결정하는 규칙입니다.

우선순위 순서 (높은 순서부터)

  1. 괄호 () - 최우선
  2. 증감 연산자 ++, -- (전위)
  3. 단항 연산자 +, -, !
  4. 산술 연산자 *, /, %+, -
  5. 비교 연산자 <, >, <=, >=
  6. 등가 연산자 ==, !=
  7. 논리 연산자 &&||
  8. 대입 연산자 =, +=, -=, 등

우선순위 예제

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);
    }
}

연습 문제

  1. 산술 연산자
    • 두 정수를 입력받아 사칙연산과 나머지를 계산하는 프로그램을 작성하세요.
  2. 비교 연산자
    • 나이를 입력받아 성인(18세 이상) 여부를 판단하는 프로그램을 작성하세요.
  3. 논리 연산자
    • 점수를 입력받아 60점 이상 100점 이하인지 확인하는 프로그램을 작성하세요.
  4. 증감 연산자
    • 전위와 후위 증감 연산자의 차이를 보여주는 예제를 작성하세요.
  5. 연산자 우선순위
    • 다음 식의 결과를 계산하고, 괄호를 사용하여 우선순위를 명확히 하세요:
      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