앞에서 배운 변수를 이용하여 각종 연산을 할 때 사용하는 연산자들의 종류를 배워 봅니다.
항(operand)는 연산에 사용되는 값으로 연산이 되는 대상을 나타냅니다.
연산자(operator)는 항을 이용하여 연산하는 기호입니다.
연산자는 사용되는 항의 갯수에 따라 단항연산자, 이항 연산자, 삼항 연산자로 분류 합니다.
단항 연산자는 증감 연산자( ++num)가 대표적이며 이항 연산자는 우리가 일반적으로 알고 있는 양쪽에 두개의 항이 들어가고 가운데이 연산자가 들어가는 형태입니다(num1 +num2;). 삼항 연산자는 조건연산자로 조건문과 역할이 비슷한 연산자 입니다(5>3? 1:0;).
int age =20;
'='기호의 연산자로 오른쪽의 값이 왼쪽의 변수의 대입될 때 사용합니다. 대입 연산자는 우선순위가 가장 낮은 연산자로 다른 연산자의 연산이 모두 끝난 뒤에 대입될 때 사용되며 다른 연산자와 같이 복합하여 사용 될 때도 있습니다.
부호 연산자는 단항 연산자로 변수의 부호를 유지하거나(+) 바꿀때(-) 사용됩니다. 부호 연산자 자체에 대입에 의미가 없기 때문에 대입연산자와 같이 쓰여야 변수의 값이 변하게 됩니다.
public class OperatorEx1 {
public static void main(String[] args) {
int num1 = -10;
int num2 = 20;
System.out.println(+num1); //-10
System.out.println(+num2); // 20
System.out.println(-num1); // 10
System.out.println(-num2); //-20
System.out.println(num1); // -10
System.out.println(num2); // 20
num1 = -num1;
System.out.println(num1); //10 - 대입연산자를써야부호가바뀐다
}
}
출력문에 변수에 '+'기호를 붙이면 부호가 유지되어서 출력됩니다. 반대로 '-'를 붙이면 부호가 바뀌어서 출력되는 것을 확인 할 수 있습니다.
그러나 출력문에서 -부호를 붙였다고해서 변수의 값이 변하는 것은 아니기 때문에 num1,num2를 그대로 출력했을 때 변하지 않은 부호 그대로 출력되는 것을 확인 할 수 있습니다.
마지막 부분에서 num1 = -num1;과 같이 대입 연산자와 같이 사용 했을때 비로서 값이 변하여 출력되는 것을 확인 할 수 있습니다.
산술 연술자 중 사칙 연산을 할 때 쓰이는 연산자 입니다.
'%'는 나머지를 구하는 연산자로 x라는 값을 n으로 나누었을 때 나머지는 항상 0 ~ n-1 범위 안에 있습니다.
식으로 정리하면 x & n = y 때 y는 0 <= y <= n-1 입니다. 나머지 값의 범위가 정해져 있는 것을 활용해서 사용되는 경우가 많습니다.
public class OperatorEx2 {
public static void main(String[] args) {
int num = 5%3; // 값은 0~n-1 즉 0,1,2 가 올수 있음
System.out.println(num); //2
num = 10%3;
System.out.println(num); //1
int num1 = 10;
num1 += 2;
System.out.println(num1); //12
}
}
대입연산자와 다른 연산자가 합께 사용 되는 연산자로 변수를 중복해서 사용하는 것을 줄여주는 역할을 합니다.
단항 연산자로 변수의 값에 1을 더하거나 1을 뺄 때 사용합니다. 연산자가 변수 앞에 있냐 뒤에 있냐에 따라 결과 값이 달라 집니다. 연산자가 값의 앞에 있으면 값이 먼저 증가하고 변수의 대입되게 되고 값의 뒤에 있다면 대입이 먼저된 이후 값이 증가하게 됩니다.
public class OperatorEx31 {
public static void main(String[] args) {
int score = 100;
System.out.println(++score); // 101 // 연산이 끝나고 대입이되기때문에 다음에도 영향이감
// score = score +1; //101
// score += 1; //101
System.out.println(score++); // 101// 위에식에서 증가된값에 뒤에++은 다음에 영향을주기에
System.out.println(score); // 102 //위에서 증가한게 지금 영향이옴
System.out.println(--score); // 101
System.out.println(score--); // 101
System.out.println(score); // 100
}
}
위에 예제를 살펴보면 int score = 100; 아래의 세줄은 결과가 같은 식이지만 변수가 중복 사용되는 score = score +1;과 같은 형태는 잘 사용 되지 않습니다.
부호연산자는 대입의 의미가 없지만 증감연산자는 대입의 의미가 있기에 출력문에 사용된 연산자라도 값이 변화하게 됩니다. 그래서 ++score 에서 증가된 값은 다음줄에 score++을 출력했을 때도 여전히 반영이 되어 값이 101이 됩니다.
score ++과 같이 연산자가 뒤에 있는 경우는 대입이 먼저되고 값이 증감되기 때문에 증가된 값은 다음줄에서 반영이되서 score의 값이 102가 됩니다.
아래의 --의 경우에도 같은 방식으로 작동되는 것을 확인 할 수 있습니다.