자바의 연산자(Operator)란?
연산자는 프로그램에서 데이터를 처리하거나 조건을 평가할 때 사용하는 기호입니다.
자바에서는 다양한 종류의 연산자가 제공되며, 각 연산자는 특정한 기능을 수행합니다.
자바에서는 사칙연산(+ - * /)을 비롯해서 다양한 연산자들을 제공합니다.
연산자의 종류
연산자는 다음 표처럼 크게 산술, 비교, 논리, 대입 4가지로 나눌 수 있습니다.
(type)은 형변환 연산자를 의미합니다.
연산자의 우선순위와 결합규칙
식에 사용된 연산자가 둘 이상인 경우, 연산자의 우선순위에 의해서 연산순서가 결정됩니다.
연산자의 우선순위는 대부분 상식선에서 해결됩니다. 만약 먼저 계산되어야 하는 부분이 있으면 괄호처리를 해주면 됩니다.
(괄호는 연산자가 아니며 우선순위를 임의로 지정할 때 사용하는 기호일 뿐입니다.)
- 우선순위 : 산술 > 비교 > 논리 > 대입 순으로 수행됩니다.
- 결합규칙 : 단항(1) > 이항(2) > 삼항(3) 순으로 수행됩니다. 단항 연산자의 우선순위가 이상 연산자보다 높습니다.
- 단항 연산자의 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽입니다.
산술 연산자 (사칙 연산자 + - * /, 나머지 연산자 %)
사칙연산자는 상식적으로 곱셈, 나눗셈, 나머지 연산자가 덧셈, 뺄셈 연산자보다 우선순위가 높으므로 먼저 처리됩니다.
그리고 피연산자가 정수형인 경우, 나누는 수로 0을 사용할 수 없습니다. 만약 0으로 나누려고 하면 실행 시에 에러가 발생할 수 있습니다.
나머지 연산자는 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환하는 연산자입니다.
그리고 나눗셈에서처럼 나누는 수(오른쪽 피연산자)로 0을 사용할 수 없습니다.
나머지 연산자는 주로 짝수, 홀수 또는 배수 검사 등에 주로 사용됩니다. 그리고 나머지 연산자는 나누는 수로 음수도 허용합니다.
그러나 부호는 무시되므로 결과는 음수의 절댓값으로 나눈 나머지와 결과가 같습니다.
그냥 피연산자의 부호를 모두 무시하고, 나머지 연산을 한 결과에 왼쪽 피연산자(나눠지는 수)의 부호를 붙이면 됩니다.
- 사칙 연산자 : +, -, *, /
- 나머지 연산자 : % (나눗셈의 나머지 값을 반환)
int a = 10;
int b = 3;
System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3 (정수 나눗셈)
System.out.println(a % b); // 1
비교 연산자 (대소비교 연산자 < > <= >=, 등가비교 연산자 == !=)
비교 연산자는 두 피연산자를 비교하는 데 사용되는 연산자입니다.
주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 오직 true와 false 둘 중의 하나입니다.
등가비교 연산자는 두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산입니다.
대소비교 연산자와는 달리, 기본형은 물론 참조형, 즉 모든 자료형에 사용할 수 있습니다.
기본형의 경우 변수에 저장되어 있는 값이 같은지를 알 수 있고,
참조형의 경우 객체의 주소값을 저장하기 때문에 두 개의 피연산자(참조변수)가 같은 객체를 가리키고 있는지 알 수 있습니다.
기본형과 참조형은 서로 형 변한 이 가능하지 않기 때문에 등가비교 연산자(==,!=)로 기본형과 참조형을 비교할 수 없습니다.
- 대소 비교 : <, >, <=, >=
- 등가 비교 : ==, !=
int x = 5;
int y = 10;
System.out.println(x > y); // false
System.out.println(x == y); // false
System.out.println(x != y); // true
논리 연산자 && || !
논리연산자인
&&는 그리고(AND)에 해당하며, 두 피연산자가 모두 true일 때만 true를 결과로 얻습니다.
|| 는 또는(OR)에 해당하며, 두 피연산자 중 어느 한쪽만 true이어도 true의 결과를 얻습니다.
그리고 논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만 허용합니다.
- || (OR결합) : 피연산자 중 어느 한쪽만 true면 true를 결과로 얻습니다.
- && (AND결합) : 피연산자 양쪽 모두 true이어야 true를 결과로 얻습니다.
- ! (NOT결합) : 조건을 반대로 변경합니다.
논리 연산자의 또 다른 특징은 효율적인 연산을 한다는 것입니다.
OR연산의 경우 피 연산자 중 어느 한쪽만 참이어도 전체 연산결과가 true므로 좌측 피연산자가 true이면,
우측 피연산자의 값을 평가하지 않습니다.
AND연산의 경우도 마찬가지로 어느 한쪽만 false여도 전체 연산결과가 false이므로 좌측 피연산자가 false이면,
우측 피연산자는 평가하지 않습니다.
그래서 같은 조건식이라도 피연산자의 위치에 따라 연산속도가 달라질 수 있습니다.
OR연산의 경우 연산결과가 참일 확률이 높은 피연산자를 연산자의 왼쪽에 있어야 빠른 연산결과를 얻을 수 있습니다.
논리 부정 연산자(!)는 피연산자가 true면 false를 false면 true를 결과로 반환합니다.
주로 사용되는 곳은 조건문과 반복문의 조건식이며, 이 연산자를 잘 사용하면 조건식이 보다 이해하기 쉬워집니다.
boolean a = true;
boolean b = false;
System.out.println(a && b); // false
System.out.println(a || b); // true
System.out.println(!a); // false
대입 연산자
대입 연산자는 변수에 값을 할당하는 데 사용됩니다.
- 기본 대입 : =
- 복합 대입 : +=, -=, *=, /=, %=
int num = 10;
num += 5; // num = num + 5와 동일
System.out.println(num); // 15
증감 연산자 (단항 연산자)
증감 연산자는 피연산자에 저장된 값을 1 증가 또는 감소시킵니다.
증감연산자의 피연산자로 정수와 실수 모두 가능하지만, 상수는 값을 변경할 수 없으므로 가능하지 않습니다.
오직 대입연산자와 증감연산자만 피연산자의 값을 변경할 수 있습니다.
- 증가 연산자(++) : 피연산자의 값을 1 증가시킵니다.
- 감소 연산자(--) : 피연산자의 값을 1 감소시킵니다.
피연산자의 왼쪽에 위치하면 전위형, 오른쪽에 위치하면 후위형이라고 합니다.
전위형과 후위형 모두 피연산자의 값을 1 증가 또는 감소시키지만,
증감 연산자의 수식이나 메서드 호출에 포함된 경우 전위형일 때와 후위형일 때의 결과가 다릅니다.
- 전위형 : 값이 참조되기 전에 증가시킵니다. j = ++i;
- 후위형 : 값이 참조된 후에 증가시킵니다. j = i++;
int i = 10;
System.out.println(++i); // 11 (전위형)
System.out.println(i++); // 11 (후위형, 출력 후 증가)
System.out.println(i); // 12
조건 연산자 ? : / (삼항 연산자)
조건 연산자는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자로, 삼항 연산자는 조건 연산자 하나뿐입니다.
조건 연산자는 첫 번째 피연산자인 조건식의 평가결과에 따라 다른 결과를 출력합니다.
조건식의 평가결과가 true면 식1이, false면 식2가 연산결과가 됩니다.
가독성을 높이기 위해 조건식을 괄호()로 둘러싸는 경우가 많지만 필수는 아닙니다.
int a = 10, b = 20;
int max = (a > b) ? a : b; // b의 값이 저장됨
System.out.println(max); // 20
조건 연산자는 조건문인 if문으로 바꿔 쓸 수 있으며 if문 대신 조건 연산자를 사용하면 코드를 간략하게 작성할 수 있습니다.
Ref.
'☕️Java[자바] > 입문[이론 및 문법]' 카테고리의 다른 글
[Java] 자바 반복문[for/while/do-while] 가이드 (0) | 2024.05.24 |
---|---|
[Java] 자바 조건문(If문, Switch문) 가이드 (0) | 2024.05.19 |
[Java] 자바 변수 기본 가이드 라인 (0) | 2024.04.05 |
[Java] 자바 코드에서 주의할 점(2) (0) | 2023.03.28 |
[Java] 자바 코드에서 주의할 점(1) (0) | 2023.03.27 |