🗄️ Backend/Java

JAVA 연산자 총정리: 개념부터 예제까지!

hjwjo 2024. 10. 10. 10:49

자바에서 연산자는 변수의 값을 조작하거나 연산을 수행할 때 사용됩니다. 연산자의 종류는 다양하며, 피연산자(operand)의 개수에 따라 단항 연산자, 이항 연산자, 삼항 연산자로 나눌 수 있습니다. 또한 각 연산자는 특정 데이터 타입에 맞추어 동작하며, 범위를 벗어나는 연산에서는 오버플로(overflow)나 언더플로(underflow) 현상이 발생할 수 있습니다. 이번 포스팅에서는 자바의 다양한 연산자와 그 사용법을 알아보겠습니다.

1. 단항 연산자 (Unary Operator)

단항 연산자는 하나의 피연산자를 가지고 동작하는 연산자입니다. 대표적으로 증감 연산자(++/--), 부호 연산자(+,-), 논리 반전 연산자(!), 비트 반전 연산자(~) 등이 있습니다.

1.1 증감 연산자 (++, --)

변수의 값을 1 증가시키거나 감소시키는 연산자입니다. 위치에 따라 후위 연산자와 전위 연산자로 구분됩니다.

  • 전위 연산자: 먼저 값이 증가/감소한 후 연산에 사용됩니다.
  • 후위 연산자: 먼저 연산에 사용된 후 값이 증가/감소합니다.
int x = 5;
int y = ++x;  // 전위 연산: x는 6, y는 6
int z = x--;  // 후위 연산: z는 6, 이후 x는 5

1.2 부호 연산자 (+, -)

숫자 앞에 붙어 그 수의 부호를 변경하거나 유지합니다.

int a = 3;
int b = -a;  // b는 -3

1.3 논리 반전 연산자 (!)

논리 값을 반전시킵니다. true는 false로, false는 true로 변경됩니다.

boolean isTrue = false;
System.out.println(!isTrue);  // true 출력

1.4 비트 반전 연산자 (~)

비트의 값을 반전시킵니다. 0은 1로, 1은 0으로 변경됩니다.

byte b = 10;  // 0000 1010
System.out.println(~b);  // 결과: -11

2. 이항 연산자 (Binary Operator)

이항 연산자는 두 개의 피연산자를 가지며, 산술 연산, 비교 연산, 논리 연산 등에 사용됩니다.

2.1 산술 연산자 (+, -, *, /, %)

기본적인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 수행합니다.

int result = 7 % 3;  // 결과: 1

2.2 비교 연산자 (==, !=, >, <, >=, <=)

두 값을 비교하여 true 또는 false를 반환합니다.

int a = 5;
int b = 3;
System.out.println(a == b);  // false 출력
System.out.println(a >= b);  // true 출력

2.3 논리 연산자 (&&, ||, &, |)

논리 연산자는 두 논리식을 연산하여 true 또는 false를 반환합니다.

  • &&||Short Circuit 연산자입니다. 왼쪽 항의 결과에 따라 오른쪽 항이 실행되지 않을 수 있습니다.
boolean result = (a == 5) && (++b == 4);  // b는 증가하지 않음, 결과: true

3. 비트 연산자 (Bitwise Operator)

비트 연산자는 두 값을 비트 단위로 연산합니다.

3.1 AND 연산자 (&)

두 비트가 모두 1일 때만 1을 반환합니다.

int a = 5;  // 0000 0101
int b = 3;  // 0000 0011
System.out.println(a & b);  // 0000 0001, 결과: 1

3.2 OR 연산자 (|)

두 비트 중 하나만 1이어도 1을 반환합니다.

System.out.println(a | b);  // 0000 0111, 결과: 7

3.3 XOR 연산자 (^)

두 비트가 서로 다를 때만 1을 반환합니다.

System.out.println(a ^ b);  // 0000 0110, 결과: 6

3.4 비트 이동 연산자 (>>, <<)

비트를 왼쪽 또는 오른쪽으로 이동시킵니다.

int num = 192;
System.out.println(num >> 2);  // 오른쪽으로 2칸 이동, 결과: 48
System.out.println(num << 2);  // 왼쪽으로 2칸 이동, 결과: 768

4. 삼항 연산자 (Ternary Operator)

삼항 연산자는 조건식, 참일 때의 연산식, 거짓일 때의 연산식 세 개의 피연산자를 가집니다.

int x = 5;
String result = (x % 2 == 0) ? "짝수" : "홀수";
System.out.println(result);  // 홀수 출력

5. 대입 연산자 (Assignment Operator)

대입 연산자는 변수에 값을 대입하는 데 사용됩니다. =, +=, -=, *=, /= 등의 형태가 있습니다.

int a = 5;
a += 3;  // a = a + 3, 결과: 8

6. 표준 입/출력 (IO: Input/Output)

자바에서는 Scanner 클래스를 사용하여 입력을 받을 수 있습니다. 출력은 System.out.println()을 이용합니다.

6.1 Scanner 사용법

  • next(): 공백 전까지 문자열을 입력받음
  • nextLine(): 공백 포함 전체 문자열 입력받음
  • nextInt(): 정수 입력받음
  • nextDouble(): 실수 입력받음
import java.util.Scanner;

public class InputExample {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("이름을 입력하세요: ");
        String name = scan.next();

        System.out.print("나이를 입력하세요: ");
        int age = scan.nextInt();

        System.out.println("이름: " + name + ", 나이: " + age);
        scan.close();
    }
}

연습 문제

문제 1: 3항 연산자를 이용한 절대값 구하기

0에서 10까지의 정수를 랜덤으로 생성하고, 5를 빼서 범위를 -5에서 5로 만든 후 절대값을 출력하세요.

int x = (int)(Math.random() * 11) - 5;
int absValue = (x < 0) ? -x : x;
System.out.println("절대값: " + absValue);

문제 2: 나이 판별 프로그램

Scanner를 이용해 사용자의 나이를 입력받고, 20세 이상이면 "성인", 그렇지 않으면 "미성년자"라고 출력하는 프로그램을 작성하세요.

import java.util.Scanner;

public class AgeCheck {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("나이를 입력하세요: ");
        int age = scan.nextInt();

        System.out.println(age >= 20 ? "성인입니다." : "미성년자입니다.");
        scan.close();
    }
}