프로그램에서는 값을 연산해야 하는 경우가 자주 발생합니다. 이때 사용하는 연산자는 사칙 연산과 값을 비교하는 연산자, 비트 단위의 연산자까지 여러 종류가 있습니다. 연산자를 알아보도록 하겠습니다.
1. 기본 연산자
연산자란 연산에서 사용하는 기호입니다. 수학 시간에 하는 덧셈, 뺄셈 등이 연산자입니다. 그리고 연산에 사용하는 값을 항이라고 합니다. 예를 들어 1+2에서 1과 2는 항이고 +는 연산자입니다. 연산자는 항이 한 개인 단항 연산자, 항이 두 개인 이항 연산자, 항이 세 개인 삼항 연산자가 있습니다.
대입 연산자는 변수에 값을 대입하는 연산자입니다. 대입 연산자는 우선순위가 가장 낮은 연산자이기 때문에 여러 연산자가 하나의 문장에 있을 때 모든 연산을 끝내고 마지막에 대입하는 것입니다. 대입 연산자를 간단하게 나타내자면 다음과 같이 왼쪽 변수에 오른쪽 변수를 대입합니다.
int boxWidth = 10; // 상자 너비에 10을 대입함
부호 연산자는 +, - 두 가지가 있습니다. 덧셈, 뺄셈 연산에 쓰는 이항 연산자이면서 부호를 나타내는 단항 연산자로 사용하기도 합니다. 예를 들어 +1은 양수, -1은 음수를 나타냅니다. 그런데 변수에 -만 사용한다고 해서 값 자체가 음수로 바뀐다고 생각하시면 안 됩니다. 밑에 예시를 한 번 봅니다.
int num = 1;
System.out.println(+num); //1이 출력됨
System.out.println(-num); //-1이 출력됨. 그렇지만 실제로 num이 바뀌는 것은 아님
System.out.println(num); //1이 출력됨
num = -num; //num에 -1이 대입됨
System.out.println(num); //-1이 출력됨
위와 같이 값 자체를 바꾸기 위해서는 = 이라는 대입 연산자를 사용해서 값을 대입해야 합니다.
산술 연산자는 사칙연산에서 사용하는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%) 이렇게 다섯 가지입니다. 산술 연산자는 우리가 프로그램을 만들 때 종종 유용하게 사용할 수 있습니다. 산술 연산자의 우선순위는 일반 수학 연산과 같습니다. *, / 와 함께 나머지를 구하는 % 도 우선순위가 동일합니다.
증가·감소 연산자는 단항 연산자입니다. 연산자 앞이나 뒤에 사용하며 값을 1만큼 늘리거나 줄일 수 있습니다. 증가·감소 연산자도 자주 사용하는 연산자입니다. ++는 값에 1을 더합니다. 예를 들어 age = ++num 이라고 하게 되면 먼저 num 값에 1을 증가시킨 후에 val 변수에 대입을 하는 것입니다. 그렇지만 val = num++; 이렇게 사용하게 되면 변수 val에 기존 num 값을 먼저 대입한 후에 num 값이 1이 증가하게 됩니다. 위에 든 예시처럼 연산자를 앞에 쓰는 경우와 뒤에 쓰는 경우에는 그 결괏값이 전혀 달라지기 때문에 주의해서 사용해야 합니다.
관계 연산자는 항이 두 개인 이항 연산자입니다. 두 개의 항을 비교해서 같거나 크거나 작거나 하는 여부를 확인합니다. 우리가 수학 시간에 배운 부등호가 이에 해당합니다. 관계 연산자의 결과는 참(true) 또는 거짓(false)으로 나타납니다. > 는 왼쪽 항이 크면 참이고 아니면 거짓의 결괏값을 가집니다. 반대로 < 는 왼쪽 항이 작으면 참이고 아니면 거짓입니다. 또한 >=, <=, ==, != 이렇게 관계를 표시할 수 있는 연산자들입니다. 예를 한번 들어보겠습니다.
int age = 10;
boolean val = (age > 20);
System.out.println(val); //false
위 경우에는 age가 10이므로 20보다 작기 때문에 false를 반환하게 됩니다.
논리 연산자는 논리곱, 논리합, 부정이 있습니다. 논리곱은 두 명제가 모두 참이면 참이고, 논리합은 두 명제 중 하나만 참이면 참입니다. 참의 부정은 거짓이고 거짓의 부정은 참입니다. 관계 연산자의 우선순위가 논리 연산자보다 높기 때문에 관계 연산자의 결괏값을 가지고 논리 연산자의 값을 계산합니다. &&는 논리곱을 나타내며 ||는 논리합을 나타냅니다. 부정은 ! 를 사용합니다.
복합 대입 연산자는 대입 연산자와 다른 연산자를 조합해서 사용하는 연산자입니다. 대입 연산자는 우선순위가 가장 낮기 때문에 마지막으로 결괏값을 변수에 대입합니다. 종류로는 +=(두 항을 더해서 왼쪽 항에 대입), -=(왼쪽 항에서 오른쪽 항을 빼서 나온 값을 왼쪽 항에 대입), *=(두 항의 값을 곱해서 왼쪽 항에 대입), /=(왼쪽 항을 오른쪽 항으로 나누고 몫을 왼쪽 항에 대입), %=(왼쪽 항을 오른쪽 항으로 나누고 나머지를 왼쪽 항에 대입) 외에도 <<=, >>=, >>>=, &=, |=, ^= 이 있습니다.
조건 연산자는 연산에 필요한 항의 개수가 세 개이기 때문에 삼항 연산자라고 합니다. 삼항 연산자는 "조건식 ? 결과 1 : 결과 2;" 처럼 표현을 합니다. 의미는 조건식이 참이면 결과 1이 나타나고 조건식이 거짓이면 결과 2가 나타납니다. 간단한 예를 한 번 들어보겠습니다. int num = (1 > 2) ? 10 : 100; 해석을 해보자면 1이 2보다 작기 때문에 거짓이 됩니다. 그렇기에 결과는 100이 나오게 됩니다.
2. 비트 연산자
비트 연산자는 비트 논리 연산자와 비트 이동 연산자가 있습니다.
비트 논리 연산자는 비트 단위로 &, | ^, ~ 연산이 이루어집니다. &연산자는 두 개의 비트 값이 모두 1인 경우에만 결괏값이 1이 됩니다. 5와 10의 & 연산을 하면 5는 2진수 형태로 나타냈을 때 0101이 되고 10은 1010이 되기 때문에 결괏값은 0이 됩니다. 이번에는 5와 10을 가지고 | 연산을 해보겠습니다. 비트가 하나만 1이어도 결과가 1이 되기 때문에 2진수로 나타냈을 때 1111이 되면서 10진수로 변환하게 되면 15가 나옵니다. ^연산자는 같은 값이면 0, 다른 값이면 1을 가지게 됩니다. ~연산자는 비트 값을 1은 0으로 0은 1로 바꾸는 연산자라서 반전 연산자라고도 불립니다.
비트 이동 연산자는 <<, >>, >>> 이렇게 세 가지가 있습니다. << 연산자는 비트를 왼쪽으로 이동시키는 연산자입니다. >>연산자는 비트를 오른쪽으로 이동시키는 연산자입니다. >>>연산자는 >>연산과 같이 비트를 오른쪽으로 이동하게 됩니다. 다만 차이는 >>> 연산자는 왼쪽에 채워지는 비트값이 부호 비트에 상관없이 무조건 0이 된다는 점입니다.
'Java' 카테고리의 다른 글
배열 ArrayList (0) | 2025.02.06 |
---|---|
클래스 메서드 접근 제어자 (0) | 2025.02.06 |
조건문과 반복문 (0) | 2025.02.04 |
변수와 자료형 (0) | 2025.02.02 |