본문 바로가기
개념서/Java

[Java] 연산자

by 사서T 2022. 5. 27.

연산자

연산자(operator) : 연산을 수행하는 기호(+, -, *, / 등)

피연산자(operand) : 연산자의 작업 대상(변수, 상수, 리터럴, 수식)

<연산자의 우선순위와 연산 방향>

  • '산술 > 비교 > 논리 > 대입'의 순서대로 수행된다. (괄호 안의 식이 가장 우선순위가 높다.)
  • '단항 > 이항 > 삼항'의 순서대로 우선순위가 높다.
  • 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

※ 산술 변환은 연산 수행 직전에 발생하는 피연산자의 자동 형변환을 의미하며, 연산결과의 타입은 피연산자의 타입과 일치한다.

  • 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 형변환)
  • 피연산자의 타입이 int보다 작은 타입이면 int로 형변환된다.(오버플로우 방지 및 CPU 연산 효율 고려)

단항 연산자

증감 연산자

부호 연산자

   간단한 예로 변수나 상수에 앞에 '-'를 붙이는 경우로 '-10', '-i' 등과 같은 경우가 있다.


산술 연산자

사칙 연산자 & 나머지 연산자

   * , % , / , +, - 가 존재한다.

<주의점>

  • *, %, / 연산자는 +, - 연산자보다 높은 우선순위를 가진다.
  • 사칙연산의 결과값이 변수 타입이 표현 가능한 범위보다 큰 경우 의도치 않은 결과가 나온다.
  • 분자를 0으로 나누는 경우를 조심해야 한다.
  • 피연산자가 정수형인 경우 0으로 나누면 에러가 발생한다.

비교 연산자

대소비교 연산자

   두 피연산자를 비교하는데 사용되는 연산자이다. 논리형과 참조형을 제외하고 사용이 가능하다.

등가비교 연산자

   두 피연산자 값의 일치 여부를 판단한다. 모든 타입에 사용 가능하며, 참조형의 경우 같은 객체인지를 판단한다.


논리 연산자

논리 연산자

   논리 연산자를 피연산자로 논리형 또는 논리형 값을 결과로 하는 조건식만을 허용한다.

※ OR 연산의 경우 어느 한 쪽만 true면 결과가 true가 반환되고, AND 연산의 경우도 어느 한 쪽이라도 false면 false가 반환되기 때문에 피연산자의 위치에 따라 코드의 효율이 달라질 수 있다. 왜냐하면 결과가 정해졌기 때문에 더 이상 이후 피연산자에 대해 연산을 수행할 필요가 없기 때문이다.

비트 연산자

   문자를 포함한 정수인 피연산자를 비트단위로 논리 연산한다.

<간단한 쉬프트 연산 예제>

※ x << n은 x * 2ⁿ의 결과와 같고, x >> n은 x / 2ⁿ의 결과와 같다. 하지만 쉬프트 연산의 속도가 더 빠르고 효율적이다.


그외 연산자

조건 연산자

   세 개의 피연산자(조건식, 식1, 식2)를 필요로 하는 삼항 연산자이다. 조건식의 결과가 true이면 식1, 아니면 식2의 결과를 반환한다.

대입 연산자

   '=', 'op='가 있으며 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용된다.

 

<복합 대입 연산자>


Q&A

Q. 증감 연산자의 전위형과 후위형의 차이는?

A. 전위형은 값을 참조하기 전에 수행되고, 후위형은 값을 참조한 후에 수행된다.

 

Q. 쉬프트 연산과 2ⁿ을 이용한 연산의 결과가 동일한데 쉬프트 연산을 사용하는 이유는?

A. 나눗셈과 곱셈 연산자의 속도보다 쉬프트 연산의 속도가 더 빠르기 때문이다.


참고자료

  • Java의 정석

'개념서 > Java' 카테고리의 다른 글

[Java] 상속  (0) 2022.06.10
[Java] 객체지향 프로그래밍 I  (0) 2022.06.06
[Java] 조건문, 반복문, 배열  (0) 2022.05.28
[Java] 변수  (0) 2022.05.23
[Java] 시작하기  (0) 2022.05.21

댓글