2026-03-25

오늘 한 것

  • 자바의 연산자 우선순위 10단계 계층 구조 학습
  • 우선순위가 높은 것(괄호)부터 낮은 것(대입)까지의 순서 정리
  • 실무 개발자들이 우선순위를 다루는 두 가지 핵심 원칙 이해
    • 상식선에서 생각하기
    • 애매하면 괄호 () 사용하기

막힌 점

  • 10가지나 되는 연산자 순서를 일일이 암기해야 한다는 압박감이 있었음
  • 특히 비트 연산자나 쉬프트 연산자처럼 평소 잘 쓰지 않는 연산자의 위치가 헷갈렸음
  • 복잡한 연산식에서 우선순위를 잘못 판단했을 때 발생할 수 있는 논리 오류에 대해 고민함

정리

  • 연산자 우선순위 요약:
    1. 괄호 () : 가장 높음
    2. 단항 연산자 : ++, --, !, ~, new, (type)
    3. 산술 연산자 : *, /, %가 우선, 그 다음 +, -
    4. Shift 연산자 : <<, >>, >>>
    5. 비교 연산자 : <, <=, >, >=, instanceof
    6. 등식 연산자 : ==, !=
    7. 비트 연산자 : &, ^, |
    8. 논리 연산자 : &&, ||
    9. 삼항 연산자 : ? :
    10. 대입 연산자 : =, +=, -=, *=, /=, %= : 가장 낮음
      • 핵심 결론: 모든 순서를 외우기보다, 수학적 상식을 따르되 조금이라도 복잡해 보이면 괄호 () 를 적극적으로 활용해 가독성을 높이고 의도를 명확히 하는 것이 중요함

코드

public class OperatorPrecedence { public static void main(String[] args) { // 변수 a와 b를 선언하고 각각 10과 20으로 초기화합니다. int a = 10; int b = 20;

    // 1. 산술 연산자 우선순위 (* 가 + 보다 우선함)
    // 5 + 10 * 2 는 15 * 2 가 아니라 5 + 20 이 되어 25가 출력됩니다.
    int result1 = 5 + a * 2; 
    System.out.println(result1); // 출력: 25

    // 2. 비교 연산자와 논리 연산자 (비교 > 논리)
    // a > 5 가 먼저 계산되어 true, b < 25 가 계산되어 true. 
    // 마지막으로 true && true 가 계산되어 true가 출력됩니다.
    boolean result2 = a > 5 && b < 25; 
    System.out.println(result2); // 출력: true

    // 3. 괄호를 통한 우선순위 강제 및 가독성 확보 (가장 권장되는 방식)
    // 괄호로 묶어줌으로써 연산 순서를 한눈에 파악할 수 있게 합니다.
    // (a + b)가 먼저 계산되어 30이 되고, 30 / 10이 되어 3이 출력됩니다.
    int result3 = (a + b) / 10; 
    System.out.println(result3); // 출력: 3

    // 4. 대입 연산자의 우선순위 (가장 낮음)
    // 오른쪽의 모든 연산(a + 5)이 끝난 뒤에 변수 a에 결과값 15가 저장됩니다.
    a += 5; // a = a + 5 와 동일한 의미
    System.out.println(a); // 출력: 15
} }