Post

☕ Java Syntax 003 - 연산자

☕ Java Syntax 003 - 연산자

연산자와 피연산자

  • 연산자(Operator): 연산 기호
  • 피연산자(Operand): 연산 대상

연산자 종류

  • 산술 연산자: +, -, *, /, %
  • 증감 연산자: ++,
  • 비교 연산자: ==, !=, >, <, >=, <=
  • 논리 연산자: &&, ||, !
  • 대입 연산자: =, +=, -=, *=, /=, %=
  • 비트 연산자: &, |, ^, ~, <<, >>, >>>
    • 비트연산자는실무에서 거의 사용할 일이 없다. 필요할 때 찾아보자.
  • 삼항 연산자: ? :
  • instanceof 연산자: 객체 타입을 확인한다.
  • 그 외: new, [](배열인덱스), .(객체 멤버 접근), ()(메소드 호출)

0으로 나누기

  • 10 / 0과 같이 숫자는 0으로 나눌 수 없다. 수학에서 허용하지 않기 때문이다.
  • 또한 코드에서 어떤 숫자를 0으로 나눌 경우 프로그램에 오류가 발생한다.
1
Exception in thread "main" java.lang.ArithmeticException: / by zero
  • 예외가 발생하면 해당 시점에서 프로그램이 종료된다.

문자열 더하기

  • 문자열 + 문자열
  • 문자열 + 숫자의 경우 숫자를 문자열로 변경한 다음에 서로 더한다.
  • 변수에 담겨 있어도 문자열과 문자열 또는 문자열과 숫자를 더하면 문자열이 된다.

연산자 우선순위

1
2
3
4
5
6
7
8
9
10
11
package operator;

public class Operator4 {
    public static void main(String[] args) {
        int sum3 = 2 * 2 + 3 * 3; // (2 * 2) + (3 * 3)
        int sum4 = (2 * 2) + (3 * 3); // sum3과 같다.
        
		System.out.println("sum3 = " + sum3);
        System.out.println("sum4 = " + sum4);
    }
}
  • 두 연산은 같은 연산이다.
  • 하지만 보통은 이 연산을 보고 잠깐 연산자 우선순위를 생각을 해야한다.
  • sum4와 같이 괄호를 명시적으로 사용하는 것이 더 명확하고 이해하기 쉽다.
  • 즉, 코드가 더 많더라도 명확하고 단순한 것이 더 유지보수 하기 좋다.
  • 연산자 우선순위는 다음과 같다.
  1. 괄호 ()
  2. 단항연산자 (예: ++, --, !, ~, new, (type))
  3. 산술연산자 ( *, /, %, +, -)
  4. Shift 연산자 ( <<, >>, >>>)
  5. 비교연산자 ( <, <=, >, >=, instanceof)
  6. 등식연산자 ( ==, !=)
  7. 비트연산자 ( &, ^, |)
  8. 논리연산자 ( &&, ||)
  9. 삼항연산자 ( ? :)
  • 이 많은 우선순위를 어떻게 외워야 할까?
  • 실무 개발자들은 연산자 우선순위를 외우지 않는다.
  • 대신 딱 2가지만 기억하면 된다.
    1. 상식 선에서 우선순위를 사용하자.
    2. 애매하면 괄호를 사용하자
  • 코드를 딱 보았을 때 복잡해보이면 나 뿐만 아니라 모든 사람이 그렇게 느낀다.
  • 이때는 괄호를 사용해서 우선순위를 명시적으로 지정하면 된다.

요약 포인트

  • 5 / 2의 결과는 2.5가 되어야 하지만 결과는 소수점이 제거된 2가 나온다.
  • 자바에서 같은 int형끼리 계산하면 계산 결과도 int형을 사용한다.
  • 증감 연산자에는 전위 증감 연산자, 후위 증감 연산자가 있다.
  • 증감 연산자를 단독으로 사용하는 경우에는 전위이든 후위이든 둘다 결과가 같다.
  • b = ++a;의 경우 a += 1; b = a; 를 축약할 수 있다는 장점이 있다.
  • 비교 연산자를 이용하면 참(true) 또는 거짓(false)이라는 결과가 나온다.
  • 문자열이 같은지 비교할 때는 ==이 아니라 .equals() 메서드를 사용해야 한다.
  • 논리 연산자의 경우 a > 10 && a < 20;보다 10 < a && a < 20;과 같이 작성하는 것이 코드를 읽기에 더 좋다.

체크 포인트

  • 산술 연산자
    • 피연산자 간 타입이 맞지 않는다면 업 캐스팅 발생
    • 결과 타입이 피연산자의 타입을 벗어나지 못함
  • 비교 연산자: 연산 결과는 true 또는 false
    • 다음과 같은 경우 단락 평가 발생
      • false && true
      • false && false
      • true || true
      • true || false
    • 단락 평가는 성능을 위해 사용하되, 추후 유지보수 차원에서 뒷 부분에는 간단한 조건을 적어두는 컨벤션이 있을 수 있음
  • 논리 부정 연산자: !
  • 비트 연산자는 AND, OR보다 빠르기 때문에 게임 개발 영역에서 성능을 위해 주로 사용함
This post is licensed under CC BY 4.0 by the author.