3) 연산자2 - 연산자의 종류

dev-mage·2022년 9월 13일
0

Hello Java World!

목록 보기
7/32
post-thumbnail

Java의 산술, 단항, 비교, 논리, 조건, 대입 연산자

산술 연산자

연산자설명
+덧셈 연산자(문자열을 결합할 때도 사용)
-뺄셈 연산자
*곱셈 연산자
/나눗셈 연산자
%나머지 연산자: 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환, 피연산자로 정수만 허용
  • 우선순위: 곱셈 / 나눗셈 / 나머지 연산자 > 덧셈 / 뺄셈 연산자
  • 피연산자가 정수형인 경우, 나누는 수로 0을 사용할 수 없다. → 나누려고 할 시 에러 발생.
  • 나누기 연산자의 두 피연산자가 모두 정수형 타입인 경우, 연산 결과 역시 정수형 타입이다. 정수형 타입은 소수점을 저장하지 않기 때문에 정수만 남고 소수점 이하는 버려짐. 이때 반올림도 발생하지 않음.
  • 나머지 연산자는 나누는 수로 음수도 허용. 그러나 부호는 무시되므로 결과는 음수의 절대값으로 나눈 나머지와 결과가 같음.

단항 연산자

연산자설명
+양수 부호 연산자(거의 쓰이지 않음)
-음수 부호 연산자: 피연산자의 부호를 반대로 변경한 결과를 반환
++증가 연산자: 피연산자의 값을 1 증가시킨다.
--감소 연산자: 피연산자의 값을 1 감소시킨다.
  • 증감 연산자의 피연산자로는 정수와 실수 모두 가능하지만, 상수는 값을 변경할 수 없으므로 불가능.
  • 증감 연산자는 위치에 따라 전위형과 후위형으로 나뉨.
    타입설명예시
    전위형(prefix)값이 참조되기 전에 증감시킨다.j = ++i;
    후위형(postfix)값이 참조된 후에 증감시킨다.j = i--;
    • 전위형은 변수(피연산자)의 값을 먼저 증감시킨 후에 변수의 값을 읽어오는 반면, 후위형은 변수의 값을 먼저 읽어 온 후에 값을 증감시킴.

      // 전위형) j = ++i;
      ++i; // 증가 후에
      j = i; // 참조하여 대입
      
      // 후위형) j = i++;
      j = i; // 참조하여 대입 후에
      i++; // 증가

비교 연산자

  1. 대소비교 연산자: 두 피연산자의 값의 크기를 비교.

    • 기본형 중에서 boolean을 제외한 나머지 자료형에 다 사용할 수 있지만 참조형에는 사용할 수 없음.
    비교 연산자연산 결과
    >좌변 값이 크면 true, 아니면 false
    <좌변 값이 작으면 true, 아니면 false
    >=좌변 값이 크거나 같으면 true, 아니면 false
    <=좌변 값이 작거나 같으면 true, 아니면 false
  2. 동등비교 연산자: 두 피연산자의 값이 같은지 아닌지를 비교.

    • 대소비교 연산자와는 달리 모든 자료형에 사용할 수 있음.
      • 기본형: 변수에 저장돼 있는 값이 같은지를 알 수 있음.
      • 참조형: 두 피연산자가 같은 객체를 가리키고 있는지(고유값이 같은지) 아닌지 알 수 있음.
    • 기본형과 참조형을 비교할 수는 없음.
    비교 연산자연산 결과
    ==두 값이 같으면 true, 아니면 false
    !=두 값이 다르면 true, 아니면 false

※ 서로 다른 참조형의 내용을 비교하고 싶다면 equals() 메서드를 사용해야 한다.

논리 연산자

  • 둘 이상의 조건을 ‘그리고(AND)’나 ‘또는(OR)’으로 연결하여 하나의 식으로 표현.
  • 피연산자로 boolean형 또는 boolean 값을 결과로 하는 조건식만 허용.
    • || (OR 결합): 피연산자 중 어느 한 쪽이 true인 경우 true를 반환.

    • && (AND 결합): 피연산자 양쪽 모두 true이어야 true를 반환.

      피연산자OR 결합AND 결합
      true / truetruetrue
      true / falsetruefalse
      false / truetruefalse
      false / falsefalsefalse

Short-circuit evaluation(단락 평가)
단락 평가란 두 번째 조건의 검사가 첫 번째 조건의 결과에 따라 실행되는 것을 뜻한다. 예를 들어 OR 결합에서 첫 번째 조건의 결과가 true인 경우 두 번째 조건의 결과에 상관없이 식의 결과는 true이므로 두 번째 조건의 검사를 하지 않는 것이 효율적이다. 이를 자바에서는 ‘||’와 같이 | 연산자 2개를 붙여쓰는 단락 연산자(Short-circuit operator)로 표현할 수 있다.

int a = 0;
System.out.println("1. a: " + a);

// 단락 평가
if(a == 0 || a++ == 1 ) {
	 // 단락 평가에 의해서 첫 번째만 실행
   System.out.println("2. || a: " + a);
}

System.out.println("3. a: " + a);

if(a == 0 | a++ == 1 ) {
	 // 단락 평가를 하지 않았기 때문에 두 번째까지 실행
   System.out.println("4. | a: " + a);
}

System.out.println("5. a: " + a);

실행 결과

논리 부정 연산자

  • 피연산자가 true면 false를, false면 true를 반환.
    x!x
    truefalse
    falsetrue

조건 연산자(삼항 연산자)

  • 첫 번째 피연산자인 조건식의 평가결과가 true면 식1이, false면 식2가 연산 결과가 됨.
  • if-then-else문의 축약형이라고 할 수 있음.

// 조건 연산자
result = x > y ? true : false;

// if-then-else문
if(x > y) result = true;
else result = false;

대입 연산자

  • 변수와 같은 저장 공간에 값 또는 수식의 연산결과를 저장 후 저장된 값을 연산결과로 반환.

References

  • 자바의 정석 CHAPTER 3

0개의 댓글