operations
)은 프로그램에서 데이터를 처리하여 결과를 산출하는 것을 말한다.operator
)라고 하고, operand
)라고 한다expressions
)이라고 한다.연산식은 반드시 하나의 값을 산출한다.
int result = x + y;
연산식은 다른 연산식의 피연산자 위치에도 올 수 있다.
boolean result = (x+y) < 5;
산술 *
연산자가 +
연산자보다 우선순위가 높으므로 위와 같은 순서로 연산이 이뤄진다.
만약 var1
와 var2
를 먼저 연산하고 싶다면 ()
를 사용하면 된다.
📌 연산의 방향과 우선순위 정리
- 단항, 이항, 삼항 연산자 순으로 우선순위를 갖는다.
- 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 갖는다.
- 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다. (
→
)- 복잡한 연산식에는 괄호
()
를 사용해서 우선순위를 정해준다.
단항 연산자는 피연산자가 단 하나뿐인 연산자를 말하며,
부호 연산자(+
,-
), 증감 연산자(++
,--
), 논리 부정 연산자(!
), 비트 반전 연산자(~
)가 있다.
+
, -
)양수 및 음수룰 표시하는
+
,-
.boolean
타입과char
타입을 제외한 나머지 기본 타입에 사용할 수 있다.
+
, -
는 산술 연산자이기도 하고, 부호 연산자이기도 하다.부호 연산자를 정수 및 실수 리터럴 앞에 붙여 양수 및 음수를 표현한다.
int i1 = +100;
int i2 = -100;
double d1 = +3.14;
double d2 = -10.5;
부호 연산자를 정수 또는 실수 타입 변수 앞에 붙일 수도 있다.
이 경우, 변수 값의 부호를 유지하거나 바꾸기 위해서 사용한다.
int x = -100;
int result1 = +x; //result1은 -100
int result2 = -x; //result2는 100
주의⭐ 부호 연산자의 산출 타입은
int
타입이 된다!
short s = 100;
short result = -s; //컴파일 에러!
그래서 위와 같이 컴파일 에러가 발생한다. 다음과 같이 부호 연산자를 사용할 때는 결과를 저장할 변수를 int
타입으로 변경해야 한다.
short s = 100;
int result = -s; //result는 -100
++
, --
)증감 연산자는 변수의 값을 1 증가(
++
)시키거나 1 감소(--
)시키는 연산자를 말한다.
boolean
타입을 제외한 모든 기본 타입의 피연산자에 사용할 수 있다.
증감 연산자가 변수 앞/뒤 어디든 위치해도 상관없다.
다른 연산자와 함께 사용하는 연산식에서는 증감 연산자의 위치에 따라 연산식의 결과가 다르게 나오므로 주의해야 한다.
증감 연산자가
int x = 1;
int y = 1;
int result1 = ++x + 10; //result1은 12
int result2 = y++ + 10; //result2는 11
result1
은 x
값이 1 증가된 후, 10과 합쳐져서 2 + 10 = 12가 된다.result2
는 y
값과 10이 합쳐져서 11이 된 후, y
값을 1 증가시킨다.!
)논리 부정 연산자는
true
를false
로,false
를true
로 변경하기 때문에boolean
타입에만 사용할 수 있다.
논리 부정 연산자는 조건문과 제어문에서 사용되어 조건식의 값을 부정하도록 해서 실행 흐름을 제어할 때 주로 사용한다. 또한 두 가지 상태(true/false)를 번갈아가며 변경하는 토글(toggle
) 기능을 구현할 때도 주로 사용한다.
~
)비트 반전 연산자는 정수 타입(
byte
,short
,int
,long
)의 피연산자에만 사용되며,
피연산자를 2진수로 표현했을 때 0을 1로, 1을 0으로 반전한다.
연산 후, 부호 비트인 최상위 비트를 포함해서 모든 비트가 반전되기 때문에, 부호가 반대인 새로운 값이 산출된다.
비트 반전 연산자를 사용할 때 주의할 점은 비트 반전 연산자 산출 타입은 int
타입이 된다는 것!
피연산자는 연산을 수행하기 전에 int
타입으로 변환되고, 비트 반전이 일어난다.
그래서 다음과 같은 코드는 컴파일 에러가 발생한다.
byte v1 = 10;
byte v2 = ~v1; //컴파일 에러
이를 해결하기 위해서는 다음과 같이 변경해야 한다.
byte v1 = 10;
int v2 = ~v1;
이항 연산자는 피연산자가 두 개인 연산자를 말하며,
산술 연산자(+
,-
,*
,/
,%
), 문자열 연결 연산자(+
), 대입 연산자(=
,+=
,-=
,*=
,/=
,%=
,&=
,^=
,|=
,<<=
,>>=
,>>>=
), 비교 연산자(<
,<=
,>
,>=
,==
,!=
), 논리 연산자(&&
,||
,&
,|
,^
,!
), 비트 논리 연산자(&
,|
,^
), 비트 이동 연산자(<<
,>>
,>>>
) 등이 있다.
+
, -
, *
, /
, %
)산술 연산자는 사칙연산인 더하기(
+
), 빼기(-
), 곱하기(*
), 나누기(/
)와 나머지 연산자(%
)를 포함한 총 5개이다.
산술 연산자는 피연산자들의 타입이 동일하지 않을 경우,
다음과 같은 규칙을 사용해서 피연산자들의 타입을 일치시킨 후 연산을 수행한다.
int
타입보다 크기가 작은 타입일 경우int
타입으로 변환 후 연산을 수행한다. 따라서 연산의 산출 타입은 int
이다.byte
+ byte
→ int
+ int
= int
long
타입이 있을 경우long
타입으로 변환 후 연산을 수행한다. 따라서 연산의 산출 타입은 long
이다.int
+ long
→ long
+ long
= long
float
, double
)이 있을 경우,int
+ double
→ double
+ double
= double
📌 정리
long
타입을 제외한 정수 타입 연산은int
타입으로 산출되고, 피연산자 중 하나라도 실수 타입이면 실수 타입으로 산출된다.
+
)문자열 연결 연산자인
+
는 문자열을 서로 결합하는 연산자이다.
피연산자 중 한쪽이 문자열이면 +
연산자는 문자열 연결 연산자로 사용되어 다른 피연산자를 문자열로 변환하고 결합한다.
<
, <=
, >
, >=
, ==
, !=
)비교 연산자는 대소 또는 동등을 비교해서
boolean
타입인true
/false
를 산출한다.
대소 연산자는 boolean
타입을 제외한 기본 타입에 사용할 수 있고, 동등 연산자는 모든 타입에 사용될 수 있다.
비교 연산자는 흐름 제어문인 조건문(if
), 반복문(for
, while
)에서 주로 이용되어 실행 흐름을 제어할 때 사용한다.
만약 피연산자가 char
타입이면 유니코드 값으로 비교 연산을 수행한다
비교 연산자에서도 연산을 수행하기 전에 타입 변환을 통해 피연산자의 타입을 일치시킨다.
&&
, ||
, &
, |
, ^
, !
)논리 연산자는 논리곱(
&&
), 논리합(||
), 배타적 논리합(^
), 논리 부정(!
) 연산을 수행한다.
논리 연산자의 피연산자는boolean
타입만 사용할 수 있다.
&&
와 &
는 산출 결과는 같지만 연산 과정이 조금 다르다.
&&
: 앞의 피연산자가 false
→ 뒤의 피연산자를 평가하지 않고 바로 false
&
: 앞의 피연산자가 false
→ 뒤의 피연산자까지 평가한 뒤 false
즉, &&
가 &
보다 더 효율적으로 동작한다. ||
와 |
도 마찬가지이다.
논리 연산은 흐름 제어문인 조건문(if
), 반복문(for
, while
) 등에서 주로 이용된다.
&
, |
, ^
, ~
, <<
, >>
, >>>
)비트 연산자는 데이터를 비트(
bit
) 단위로 연산하기 때문에 정수 타입만 비트 연산을 할 수 있다. (0
과1
로 표현이 가능)
기능에 따라 비트 논리 연산자(&
,|
,^
,~
)와 비트 이동 연산자(<<
,>>
,>>>
)로 구분한다.
<<
, >>
, >>>
)비트 이동(
shift
) 연산자는 정수 데이터의 비트를 좌측 또는 우측으로 밀어서 이동시키는 연산을 수행한다.
=
, +=
, -=
, *=
, /=
, %=
, &=
, ^=
, |=
, <<=
, >>=
, >>>=
)대입 연산자는 오른쪽 피연산자의 값을 좌측 피연산자인 변수에 저장한다.
오른쪽 피연산자는 리터럴 및 변수, 그리고 다른 연산식이 올 수 있다.
단순히 오른쪽 피연산자의 값을 변수에 저장하는 단순 대입 연산자와 정해진 연산을 수행한 후 결과를 변수에 저장하는 복합 대입 연산자도 있다.
대입 연산자는 모든 연산자들 중에서 가장 낮은 연산 순위를 가지고 있기 때문에 제일 마지막에 수행된다.
삼항 연산자(
?:
)는 세 개의 피연산자를 필요로 하는 연산자를 말한다.
삼항 연산자는?
앞의 조건식에 따라 콜론(:
) 앞뒤의 피연산자가 선택된다고 해서 조건 연산식이라고 부르기도 한다.
조건식을 연산하여
true
가 나오면 삼항 연산자의 결과는 피연산자2가 된다.false
가 나오면 삼팡 연산자의 결과는 피연산자3이 된다.