연산자와 연산식
  • 연산(operations) : 프로그램에서 데이터를 처리하여 결과를 산출하는 것
  • 연산자(operator) : 연산에 사용되는 표시나 기호
  • 피연산자(operand) : 연산되는 데이터
  • 연산식(expressions) : 연산자와 피연산자를 이용한 연산 과정을 기술한 것

[연산자 종류]

  • 단항, 이항, 삼항 연산자 순으로 우선순위를 가진다.
  • 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가진다.
  • 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다.
  • 복잡한 연산식에는 괄호()를 사용해서 우선순위를 정해준다.

[연산자 우선순위]

  • 부호 연산자의 결과는 int 타입이므로, 결과를 산출하는 데이터의 타입을 int 형으로 바꾸어야 한다.
  • ++i 의 속도는 i=i+1 보다 연산 속도가 빠르다.
    • 후자는 = 연산자, + 연산자의 총 두 번의 연산이 필요하다.
    • 전자는 ++ 하나의 연산만 수행한다.
    • 하지만 실제로 컴파일하면 동일한 바이트 코드가 생성된다. 때문에 둘 중 어떤 것이 연산 속도가 빠르다고 볼 수는 없다.
  • 비트 반전 연산자(~)의 결과는 int 타입이므로, 결과를 산출하는 데이터 타입을 int 형으로 바꾸어야 한다.
  • Integer.toBinaryString() : 정수 값을 총 32비트의 이진 문자열로 리턴하는 메소드 
  • long 타입을 제외한 정수의 산술 연산은 무조건 int 타입으로 변환 후 연산을 수행한다. 그 이유로는 JVM이 기본적으로 32비트 단위의 계산을 하기 때문이다.
  • 산술 연산을 하기 전에 피연산자들의 값을 조사해서 오버플로우를 방지하자. 프로그램 실행 도중 예외가 발생하면 실행이 멈추고 프로그램이 종료된다. 이러한 경우 예외 처리를 해야 한다.
  • Nan & Infinity 연산 
    • 아래의 메소드를 사용해 Infinity와 NaN이 산출되면, 다음 연산을 수행하지 않는다. 
    • Double.isInfinite() 메소드 사용
    • Double.isNan() 메소드 사용
  • String 타입의 문자열 비교
    • strVar1, strVar2 동일한 String 객체의 번지수
    • strVar3 객체 생성 연산자인 new로 생성한 새로운 String 객체의 번지수
    • ==  연산자는 변수에 저장된 값만 비교한다. -> equals() 메소드 사용

[서로 다른 객체의 번지 값]

String strVar1 = "ABC";
String strVar2 = "ABC";
String strVar3 = new String("ABC");

System.out.println( strVar1 == strVar2);    // true
System.out.println( strVar1 == strVar3);    // false

System.out.println( strVar1.equals(strVar2));   // true
System.out.println( strVar1.equals(strVar3));   // true

 

  • 비트 연산자
    • 데이터를 bit 단위로 연산한다.
    • 정수 타입만 비트 연산이 가능하다.
    • 비트 논리 연산자(&, |, ^, ~) 
    • 비트 이동 연산자(<<, >>, >>>)

[비트 이동 연산자]

 

  • 삼항 연산자
    • 세개의 피연산자를 필요로 하는 연산자
    • ? 앞의 조건식에 따라 콜론(:) 앞 뒤의 피연산자가 선택된다고 해서 조건 연산식이라고 부르기도 한다.
    • 조건식 ? 값 또는 연산식(true) : 값 또는 연산식(false)
public class ConditionalOperationExample {
    public static void main(String[] args){
        int score = 85;
        char grade = (score > 90) ? 'A' : ((score > 80) ? 'B' : 'C');
        // 첫 번째 조건에서 90보다 작기 때문에 score > 80 으로 이동
        // 두 번째 조건에서 80보다 크기 때문에 'B'의 값을 얻게 된다. 
        System.out.println(score + "점은 " + grade + "등급입니다.");
    }
}

'프로그래밍 > JAVA' 카테고리의 다른 글

Ch06. 클래스  (0) 2022.01.02
Ch05. 참조 타입  (0) 2022.01.01
Ch04. 조건문과 반복문  (0) 2022.01.01
Ch02. 변수와 타입  (0) 2022.01.01
Ch01. 자바 시작하기  (0) 2022.01.01

+ Recent posts