본문 바로가기

프로그래밍언어/JAVA

[JAVA] 연산자 (Operator)

반응형

연산자는 '연산을 수행하는 기호' 말한다. 자바는 사칙연산 (+, -, *, /) 비롯한 다양한 연산자들을 제공한다.

 

 

1. 연산자와 피연산자

 

연산자가 연산을 수행하기 위해서는 연산의 대상이 필요한데, 이것을 '피연산자 (operand)' 라고 한다. 피연산자로는 상수, 리터럴, 변수 또는 수식 등을 사용할  있다.

 

  • 연산자 (operator): 연산을 수행하는 기호
  • 피연산자 (operand): 연산자의 작업 대상
x + 3
- 연산자: '+'
- 피연산자: 'x', '3'

 

'+' 연산자는 두개의 피연산자를 더해서 결과를 반환한다. 이와 같이 대부분의 연산자는 두개의 피연산자를 필요로 하며, 하나 또는 세개의 피연산자를 필요로 하는 연산자도 있다.

 

연산자는 연산을 수행한  항상 결과값을 반환한다.

 

 

2. 식과 대입연산자

 

연산자와 피연산자를 조합하여 계산하고자하는 바를 표현하는 것을  (expression)이라고 한다. 그리고 식을 계산하여 결과를 얻는 것을 '식을 평가 (evaluation)한다'  한다. 하나의 식을 평가하면  하나의 결과를 얻는다.

 

4 * x + 3 이라는 식을 예시로 프로그래밍에 적용해보자.

 

int x = 5;

// 작성한 식을 프로그램에 포함시키려면 식의 끝에 ';'을 붙여 하나의 문장으로 만들어야한다.
4 * x + 3; // 문장 (statement)


// 문장의 결과를 사용하기 위해서는 '=' 연산자를 사용하여 변수에 값을 저장해야한다.
int y = 4 * x + 3;

// 저장된 값을 출력하여 확인할 수 있다.
System.out.println(y); // 23
System.out.println(4 * x + 3); // 23

 

 

3. 연산자의 종류

 

- 연산자의 기능별 분류

 

종류 연산자 설명
산술연산자 +, -, *, /, %, <<, >> 사칙연산과 나머지 연산 (%)
비교연산자 <, >, <=, >=, ==, != 크고 작음, 같고 다름을 비교
논리연산자 &&, ||, !, &, |, ^, ~ and, or 조건
대입연산자 = 우변의 값을 좌변에 저장
기타 (type), ? :, instanceof 기타 연산자

 

- 피연산자의 개수에 의한 분류

 

피연산자의 개수로 연산자를 분류하기도 하하는데, 피연산자의 개수가 하나면 '단항 연산자', 두개면 '이항연산자', 세개면 '삼항 연산자'라고 부른다. 대부분 이항 연산자이고 삼항 연산자는 '? :' 하나뿐이다.

 

-- 5

 

위의 식에는  개의 연산자가 포함되어 있다.   기호 '-' 나타내지만 첫번째 '-' 부호 연산자, 두번째 '-' 뺄셈 연산자이다. 이때는 피연산자의 개수로 구분할  있다.

'부호 연산자' '3' 하나의 피연산자를 가지지만 '뺄셈 연산자' '-3' '5' 두개의 피연산자를 가진다.

 

 

4. 연산자의 우선순위와 결합규칙

 

식에 사용된 연산자가  이상인 경우, 연산자의 우선순위에 의해서 연산순서가 결정된다. 기본적으로는 수학에서 사용하는 상식 선에서 해결이 되지만 몇몇 연산자의 경우에는 우선순위를 주의해야 한다.

 

  • '<<' 연산자는 '+' 연산자보다 우선순위가 낫다.
  • 논리 연산자(&) 비교 연산자(==)보다 우선순위가 낮다.
  • 논리 연산자  '&&' '||' 보다 우선순위가 높다.

위와 같은 예외상황이 발생할  있기 때문에 애매한 경우에는 괄호를 사용하여 명확하게 표현해주는 것이 좋다.

 

- 연산자의 결합규칙

 

하나의 수식에 같은 우선순위의 연산자들이 여럿 존재하는 경우에는 연산자의 결합규칙을 따라서 처리한다. 연산자의 결합규칙은 연산자마다 다르지만 대부분 왼쪽에서 오른쪽의 순서로 연산을 수행하고, 단항 연산자와 대입 연산자만  반대인 오른쪽에서 왼쪽으로 연산을 수행한다.

 

 연산자의 우선순위 정리

  1. 산술 > 비교 > 논리 > 대입 순으로 수행된다.
  2. 단항 (1) > 이항 (2) > 삼항 (3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
  3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

 

종류 결합규칙 연산자 우선순위
단항연산자 <---- ++, --, +, -, ~, !, (type)
산술연산자 ----> *, /, %


+, -


<<, >>
비교연산자 ----> <, >, <=, >=, instanceof


==, !=
논리연산자 ----> &


^


|


&&


||
삼항연산자 <---- ? :
대입연산자 <---- =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= 낮음

 

 

5. 산술변환 (usual arithmetic conversion)

 

이항 연산자는  피연산자의 타입이 일치해야 연산이 가능하기 때문에 피연산자의 타입이 서로 다르다면 연산전에 형변환을 통해 타입을 일치시켜야 한다.

 

int i = 10;
float f = 20.0f;

float result = f + (float) i;
// 형변환으로 두 피연산자의 타입을 일치

 

대부분의 경우 작은 타입에서  타입으로 변환하여 값의 손실을 예방한다. 작은 타입에서  타입으로 변환하는경우에는 따로 형변환을 명시적으로 해주지 않아도 자동으로 형변환이 된다.

 

float result = f + i;
// 큰 타입으로 형변환시 형변환 연산자를 생략 가능하다.

 

이처럼 연산 전에 피연산자의 타입의 일치를 위해 자동 형변환 되는 것을 '산술 변환' 또는 '일반 산술 변환'이라고하며  변환은 이항 연산 뿐만 아니라 단항 연산에서도 일어난다.

 

[산술 변환 규칙]
1. 두 피연산자의 타입을 같게 일치시킨다. (보다 큰 타입으로 일치)
2. 피연산자의 타입이 int 보다 작은 타입이면 int로 변환된다.

※ <<, >> 연산과 ++, -- 연산의 경우에는 산술 변환이 일어나지 않는다.

반응형