Language/JAVA

[이것이 자바다].ch2.연산자

JSJH._. 2025. 9. 28. 17:37

[이것이 자바다] 02. 연산자

이번에는 자바의 연산자에 대해 정리한 내용입니다.

1. 종류와 우선순위

  • 연산 방향
    대부분의 왼쪽 >> 오른쪽 진행
    부호, 대입, 증감 연산자 : 왼쪽 << 오른쪽 진행합니다.
  • 최우선 연산자
    . (접근), [] (배열), () (메서드 호출 및 우선순위 지정)
  • 핵심 우선순위
    산술 > 비교 > 논리 > 대입
    괄호 () 우선순위 명확히 지정 가능합니다.

    2. 단항 연산자

  • 피연산자가 하나인 연산자입니다.
    부호(+, -), 증감(++, --), 논리 부정(!)

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

  • 전위 연산 (++a, --a): 1 증가/감소 >> 다른 연산 수행
  • 후위 연산 (a++, a--): 다른 연산 수행 >> 값 1 증가/감소
  • 순서에 따른 명확한 결과 차이가 있습니다.*

    3. 산술 연산자

  • 사칙연산(+, -, *, /), 나머지(%) 연산

    정수 연산의 함정

  • 정수끼리 연산의 결과 항상 정수입니다.
    소수점 이하는 버려짐
  • 올바른 실수 결과를 얻으려면?
    연산에 참여하는 값 중 하나 이상을 반드시 실수(float, double) 타입으로 만들어야 정수 끼리 안됩니다.

    InfinityNaN

  • 0으로 나누거나, 계산 불가능한 연산을 할 때 발생하는 특수 값입니다.
  • Infinity (무한대)
    실수를 0으로 나눌때 발생
  • NaN (Not a Number)
    연산의 결과가 숫자가 아닐때 발생

    4. 비교 연산자

    두 피연산자 비교 > true/false반환합니다.
  • 기본 타입(primitive type): ==
    내부 값 자체 비교
  • 참조 타입(reference type): ==
    주소값 비교
    두 변수가 가리키는 객체 주소 비교합니다.

    문자열 내용 비교

  • ==
    값 자체가 아닌 주소를 비교 >> 객체 일치 여부 판단
  • .equals() 메서드
    문자열 객체 주소가 아닌 내부 값 자체 일치 비교합니다.

    5. 논리 연산자

    && vs & / || vs |

  • &, |: 양쪽 피연산자 모두 평가합니다.
  • &&, || (Short-Circuit, 단락 회로 평가) : 하나로 결과가 결정되면 뒤쪽은 무시합니다.
    불필요한 연산 생략 >> 성능향상
    NullPointerException 방지

    6. 삼항(조건) 연산자

  • (조건식) ? 값1(true) : 값2(false)
    간단한 if-else 문 한 줄로 축약가능합니다.

    7. 비트 연산자

  • 숫자를 2진수 비트(bit) 단위로 직접 조작합니다.

    비트 논리 연산자 (&, |, ^, ~)

  • 두 피연산자 2진수로 변환 >> 각 자리 개별적으로 비교 연산
  • & (AND)
    두 비트가 모두 1일 때만 1
  • | (OR)
    두 비트 중 하나라도 1이면 1
  • ^ (XOR)
    두 비트가 서로 다르면 1
  • ~ (NOT)
    0은 1로, 1은 0으로

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

  • 2진수 비트를 지정된 수만큼 이동
  • a << b
    왼쪽으로 1칸 이동 : $a * 2^b$
  • a >> b
    오른쪽으로 1칸 이동 : $a / 2^b$
  • a >>> b
    오른쪽으로 이동, 빈자리 0으로