본문 바로가기
언어/자바의 정석

[자바의 정석] Chapter 3 연산자(Operator)

by chan10 2021. 1. 21.

 

연산자(operator)

연산자는 ‘연산을 수행하는 기호’를 말하며 ‘+’기호는 덧셈 연산자라고 하며 덧셈 연산을 수행한다. 사칙 연산(+, -, *, /)을 비롯하여 다양한 연산자를 이용한다.

 

연산자와 피연산자

o  피연산자(operand) : 연산을 수행하기 위한 연산의 대상으로 상수, 변수 식(式) 등을 사용할 수 있다.

o  연산자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환한다.

 

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

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

 

 

식(式)과 대입연산자

식(式)이란 연산자와 피연산자를 조합하여 계산하고자 하는 것을 표현하는 것을 말한다. 식을 계산하여 얻는 것을 ‘식을 평가(evaluation)한다’고 하며 하나의 식을 평가 시 하나의 결과 값을 얻는다.

    예) x=5일 때 3 * x +5식을 평가한 결과는 20이 된다.

o  식을 평가한 결과를 저장하는 경우 대입 연산자’=’를 사용하여 변수에 저장하며 저장하지 않고 출력만을 원할 경우에는 println()메소드에 식을 쓰면 된다.

     y = 3 * x +5;         System.out.println(3 * x +5);

 

연산자의 종류

종류 연산자 설명
산술 연산자 +  -  *  /  %  <<  >> 사칙연산(+ - * /), 나머지 연산(%)
비교 연산자 > <  >=  <=  ==  != 크고 작음과 같고 다름을 비교
논리 연산자 &&  ||  !  &  |  ^  ~ '그리고(AND)'와 '또는(OR)'으로 조건을 연결
대입 연산자 = 우변의 값을 좌변에 저장
기타 (type)  ? :  instanceof 형변환 연산자, 삼항 연산자, instanceof 연산자

 

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

o  단항 연산자 : 피연산자의 개수가 하나인 연산자로 부호 연산자가 포함된다.

    이항 연산자 : 피연산자의 개수가 두개인 연산자로 대부분의 연산자는 이항 연산자이다.

    삼항 연산자 : 피연산자의 개수가 세개인 연산자로 삼항 연산자는 오직 ‘? :’ 하나뿐이다.

o  서로 다른 연산자의 기호가 같은 경우에는 피연산자의 개수로 구분이 가능하다.

 

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

종류   결합 규칙 연산자 우선순위
단항 연산자   <------------- ++  --  +  -  ~  !  (type) 높음
 
 
 
 
 
 
 
 
 
 
 
 
낮음
산술 연산자   -------------> *  /  % 
  -------------> +  -
  -------------> <<  >>
비교 연산자   -------------> > <  >=  <=  instanceof
  -------------> ==  !=
논리 연산자   -------------> &
-------------> ^
-------------> |
  -------------> &&
-------------> ||
삼항 연산자   -------------> ? :
대입 연산자   <------------- =  +=  -=  *=  /=  %=
<<=  >>=  &=  ^=  |=

 

 

설명
-x + 3 단항 연산자 > 이항 연산자
x의 부호를 바꾼 후 덧셈을 수행한다.
x + 3 * y 곱셈/나눗셈 > 덧셈/뺄셈
이므로 3*y가 먼저 계산된다.
x + 3 > y - 2 비교 연산자(>) < 산술 연산자(+,-)
산술 연산자가 우선 순위가 더 높기에 ‘x+3’, ‘y-2’가 먼저 계산된다.
x > 3 && x < 5 비교 연산자(>,<) > 논리 연산자(&&)
비교 연산자인 ‘x>3’, ‘x<5’가 먼저 수행된다.
result = x + y * 3; 대입 연산자는 연산자 중 우선 순위가 제일 낮기에 맨 마지막에 수행된다.

 

연산자의 결합규칙

o  연산자는 대부분 왼쪽에서 오른쪽으로 수행되고 단항 연산자, 대입 연산자만 반대로인 오른쪽에서 왼쪽으로 수행한다.

연산자의 규칙

o  연산자의 우선 순위를 정리하면 다음과 같다.

1.  산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.

2.  단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.

3.  단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

 

산술 변환(usual arithmetic conversion)

o  이항 연산자는 연산 시 두 피연산자의 타입이 동일해야 하므로 연산 전 형변환으로 일치시켜야 하는데 작은 타입에서 큰 타입으로 형 변환시 자동으로 형변환이 이루어진다.

o  이처럼 연산 전에 피연산자 타입을 일치시켜주는 것을 산술 변환이라고 하며 이항 연산뿐만 아니라 단항 연산에서도 일어난다. 산술 변환 규칙은 다음과 같다.

1.  두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)

    long + int -> long + long -> long

    float + int -> float + float -> float

    float + double -> double + double -> double

2.  피 연산자의 타입이 int보다 작은 타입이면 int로 변환된다. (좁은 범위로 인해 오버플로우 발생 가능성)

    byte + short -> int + int -> int

    char + short -> int + int -> int

  

증감 연산자 ++ --

o  증감 연산자는 피연산의 값을 1 증가 또는 감소시키며 정수, 실수 모두 가능하나 상수는 불가능하다.

    증가 연산자(++) : 피연산자의 값을 1증가시킨다.

    감소 연산자(--) : 피연산자의 값을 1 감소시킨다.

o  증감 연산자의 위치에 따라 타입이 달라지며 연산 결과도 달라질 수 있다.

    전위형 : 값이 참조되기 전에 증가시킨다.  j = ++i;

    후위형 : 값이 참조된 후에 증가시킨다.    j = i++;

전위형의 경우 피연산자의 값을 먼저 증가시킨 후 변수의 값을 읽어오기에 j에 6이 대입이 되었고 후위형의 경우 변수의 값을 먼저 읽은 후 값을 증가시키기에 j에 5가 대입이 된 후 6으로 증가하였다.

o  바람직한 코드를 위해서 식에 두 번이상 포함된 변수에 증감연산자를 사용하는 것은 피해야 한다.

 

조건 연산자

o  조건 연산자는 조건식, 식1, 식2 세 개의 피연산자를 필요로 하는 삼항 연산지이며, 삼항 연산자는 조건 연산자 하나뿐이다.

o  조건 연산자는 조건식의 결과에 따라 다른 결과를 반환하며 조건식이 true일 경우 식1, 조선식 false일 경우 식2가 연산 결과가 된다. 가독성을 높이기 위해 괄호( )를 사용하지만 필수는 아니다.

조건식의 결과가 참일 경우 x, 거짓일 경우 y를 대입

o  조건 연산자의 식1과 식2, 이 두 피연산자의 타입이 다른 경우 이항 연산자처럼 산술 변환이 발생한다.

     x =  + (mod < 0.5 ? 0 : 0.5)              // 0과 0.5의 타입이 다르다.

     x =  + (mod < 0.5 ? 0.0 : 0.5)            // 0과 0.0으로 변환되었다.