[JAVA] 02 연산자와 형 변환

 

[JAVA] 02 연산자와 형 변환

이 글에서는 자바에서 사용하는 주요 연산자와 형 변환에 대해 정리한다. 연산자와 형 변환은 조건문, 반복문, 계산 로직 전반에 영향을 주며, 특히 오버플로와 자동 형 변환 규칙은 실무와 면접에서 자주 등장한다.


1. 연산자란

연산자는 변수나 값에 대해 계산, 비교, 논리 판단 등을 수행하는 기호다. 자바에서는 연산자의 종류와 우선순위가 명확하게 정의되어 있다. 연산 결과의 타입 또한 연산 규칙에 따라 결정된다.


2. 산술 연산자


int a = 10;
int b = 3;

System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b);
System.out.println(a % b);

OUTPUT


13
7
30
3
1

정수 나눗셈의 결과는 소수점이 버려진 정수값이다.


System.out.println(10 / 3);
System.out.println(10 / 3.0);

OUTPUT


3
3.3333333333333335

연산 중 하나라도 실수 타입이면 자동 형 변환이 발생하여 결과는 실수형이 된다.


3. 증감 연산자


int x = 10;

x++;
System.out.println(x);

++x;
System.out.println(x);

OUTPUT


11
12

전위 / 후위 차이


int a = 5;
System.out.println(a++);
System.out.println(a);

int b = 5;
System.out.println(++b);

OUTPUT


5
6
6

후위는 사용 후 증가, 전위는 증가 후 사용한다. 이 차이는 반복문이나 조건문에서 매우 중요하다.


4. 비교 연산자


int a = 10;
int b = 20;

System.out.println(a == b);
System.out.println(a != b);
System.out.println(a > b);
System.out.println(a < b);

OUTPUT


false
true
false
true

비교 연산자의 결과는 항상 boolean 타입이다.


5. 논리 연산자


boolean a = true;
boolean b = false;

System.out.println(a && b);
System.out.println(a || b);
System.out.println(!a);

OUTPUT


false
true
false

단락 평가(short-circuit)


int n = 10;

if (n > 0 && n < 20) {
    System.out.println("조건 만족");
}

논리 AND는 앞 조건이 false이면 뒤 조건을 검사하지 않는다. 이를 단락 평가라고 한다.


6. 대입 연산자와 내부 형 변환


int a = 10;
a += 5;
System.out.println(a);

OUTPUT


15

a += 5 는 내부적으로 (int)(a + 5) 와 동일하다. 대입 연산자는 자동 형 변환을 포함한다는 점이 중요하다.


7. 연산자 우선순위


int result1 = 10 + 2 * 3;
int result2 = (10 + 2) * 3;

System.out.println(result1);
System.out.println(result2);

OUTPUT


16
36

곱셈이 덧셈보다 우선순위가 높다. 가독성을 위해 괄호 사용을 권장한다.


8. 자동 형 변환


int a = 10;
double b = a;

System.out.println(b);

OUTPUT


10.0

작은 타입 → 큰 타입으로는 자동 변환된다. byte → short → int → long → float → double 순서다.


9. 강제 형 변환


double a = 10.7;
int b = (int)a;

System.out.println(b);

OUTPUT


10

소수점 이하 값은 버려진다. 이를 데이터 손실이라 한다.


10. 오버플로(Overflow)


int max = Integer.MAX_VALUE;
System.out.println(max);
System.out.println(max + 1);

OUTPUT


2147483647
-2147483648

범위를 초과하면 값이 순환한다. 에러가 발생하지 않는다는 점이 매우 중요하다.


11. 언더플로(Underflow)


int min = Integer.MIN_VALUE;
System.out.println(min);
System.out.println(min - 1);

OUTPUT


-2147483648
2147483647

언더플로 역시 값이 순환한다.


12. 연산 시 주의할 점 (심화)

  • 정수끼리 나누면 결과도 정수다.
  • 연산 중 자동 형 변환이 발생한다.
  • 오버플로는 에러가 아니라 논리 오류다.
  • 대입 연산자는 내부 캐스팅을 포함한다.

정리

  • 연산자는 계산과 조건 판단의 핵심이다.
  • 형 변환 규칙을 이해하지 못하면 의도하지 않은 결과가 나온다.
  • 오버플로와 단락 평가는 반드시 이해해야 한다.