-
연산자(Operator)JAVA 2023. 3. 2. 19:40
부호 연산자
연산자 연산식 설명 + +i 양수 부호(피연산자의 부호 유지) - -i 피연산자의 값을 음수로 변경 - + 연산자는 잘 사용되지 않음
- 부호를 변경하는 것도 연산에 해당되므로 정수 타입에서 - 연산자를 사용한 결과 값은 int 타입이 된다.
산술 연산자
연산자 연산식 설명 + x + y 더하기 - x - y 빼기 * x * y 곱하기 / x / y 나누기 % x % y 피연산자를 나눈 나머지 연산 - 정수와 문자열이 "+"로 결합되면 정수가 문자열로 변환된다.
- 정수 나누기 정수는 결과도 정수이다. (나눈 몫만 결과로 저장되고, 소수점 이하는 버려진다.)
- 산술 연산 시 정확한 결과를 얻기 위해서는 실수보다 정수 타입을 사용하는 것이 좋다.
- 실수 타입을 부동 소수점 방식으로 표현하기 때문에 발생하는 문제
예) 1 - 7*0.1 = 0.29999999999999993
0 나누기와 NaN, Infinity 처리
- 피연산자가 모두 정수 타입일 때 나누기(/), 나머지(%) 연산 시 분모가 0이면 무한대를 정수로 표현할 수 없기 때문에 예외(ArithmeticException)가 발생한다.
- 실수 타입의 피연산자가 포함된 나누기(/), 나머지(%) 연산 시 분모가 0.0(f)이면 예외가 발생하지 않지만 결과가 Infinity(0.0으로 / 연산) 또는 NaN(0.0으로 % 연산)이 된다.
- 이후 다른 연산을 수행해도 Intinity와 NaN은 그대로 유지되기 때문에 연산을 수행하는 의미가 없어진다. - 실수 나누기 연산의 결과가 Infinity인지 확인하려면 Double.isInfinite() 메소드를 사용하고, NaN인지 확인하려면 Double.isNaN() 메소드를 사용한다.
- 매개변수의 값이 Infinity 또는 NaN 이면 true를, 아니면 false를 리턴하는 메소드.
관계 연산자(비교 연산자)
관계 연산자 : 피연산자의 동등 여부 및 값의 크기를 비교하는 연산자
연산자 연산식 설명 == x == y 피연산자의 값이 같은지 확인 != x != y 피연산자의 값이 다른지 확인 > x > y 좌측 피연산자의 값이 우측보다 큰지 확인 >= x >= y 좌측 피연산자의 값이 우측보다 크거나 같은지 확인 < x < y 좌측 피연산자의 값이 우측보다 작은지 확인 <= x <= y 좌측 피연산자의 값이 우측보다 작거나 같은지 확인 - 관계 연산자의 결과는 boolean 타입이다. (true/false)
- 비교는 항상 왼편을 기준으로 비교한다.
- 부등호는 왼쪽에 작성한다. (<=, >=)
자료형이 다른 연산자 간 비교 연산
- 피연산자의 자료형이 다를 경우 비교 연산 수행 전에 자료형일 일치시킨다.
ex) char 타입의 'A'와 int 타입의 65를 == 연산자로 비교 시 'A'는 int 타입의 65로 변환되어 연산을 수행
ex2) double 타입의 3.0과 int 타입의 3을 == 연산자로 비교 시 3은 double 타입의 3.0으로 변환되어 연산을 수행
실수 자료형의 비교 연산
- float 자료형과 double 자료형의 비교 연산 시 각 자료형의 정밀도 차이로 인해 예상과 다른 결과가 나올 수 있다.
ex) 0.5f == 0.5 → false
float 자료형과 double 자료형을 비교할 때는 double 자료형을 float로 강제 형변환한 후 연산을 수행하면 된다.
문자열의 동등 비교
- 문자열을 비교할 때는 == 연산자 대신 equals() 메소드를 사용해야 올바른 결과를 얻을 수 있다.
- 문자열(String)은 참조 타입이기 때문에 == 또는 != 연산자를 사용하면 값이 저장된 주소에 대한 비교 연산을 수행한다.
String str1 = "Hello";String str2 = "hello";boolean result = str1.equals(str2); //false
논리 연산자
논리 연산자 : 연산의 대상 및 결과가 참과 거짓 둘 개의 값 중 하나를 취하는 연산
- AND, OR, NOT, XOR, NOT 등의 논리 연산을 수행
- 두 개의 조건을 하나로 만들 때 사용
연산자 연산식 설명 & x & y 논리곱(AND) 연산 - 피연산자가 모두 true일 떄만 true && x && y | x | y 논리합(OR) 연산 - 피연산자 중 하나라도 true이면 true || x || y ^ x ^ y 배타적 논리합(XOR) 연산 - 피연산자의 논리값이 서로 다른 경우에만 true ! !x 논리 부정(NOT) 연산 - 피연산자의 논리값을 변경(true → false, false → true) ※ &(|) 연산자와 &&(||) 연산자의 차이
- & 연산자는 양쪽 피연산자를 모두 확인한 다음 결과를 산출
- && 연산자는 앞의 피연산자의 논리값이 true이면 뒤의 피연산자를 확인하지 않고 바로 true로 판단
- 앞의 피연산자가 false이면 바로 false로 판단
- | 와 || 연산자도 동일한 방식으로 동작한다.
- &&(||) 연산자가 &(|) 연산자보다 효율적인 방식으로 동작한다.
AND (둘 다 true일 때만 결과가 true)
a b R T T T T F F F T F F F F OR (둘 중에 하나만 true여도 결과는 true)
a b R T T T T F T F T T F F F XOR(두 값이 서로 다를 때만 true)
a b R T T F T F T F T T F F F
증감 연산자
증감 연산자 : 값을 일정하게 증가하거나 감소시키는 연산자
연산자 연산식 설명 ++ ++i 연산을 수행하기 전에 피연산자의 값을 1 증가 i++ 다른 연산을 수행한 다음에 피연산자의 값을 1 증가 -- --i 연산을 수행하기 전에 피연산자의 값을 1 감소 i-- 다른 연산을 수행한 다음에 피연산자의 값을 1 감소
대입 연산자
연산자 연산식 설명 = x = 1 우측 피연산자의 값을 좌측 피연산자(변수)에 저장 - 좌측 피연산자에는 변수만 가능하고, 우측 피연산자는 변수와 리터럴 값, 연산식 모두 가능하다.
복합 대입 연산자
복합 대입 연산자 : 대입 연산자에 다른 연산자를 붙여서 연산 수행 결과를 바로 변수에 대입하는 연산자
연산자 연산식 설명 += x += 2 좌측 변수의 값에 우측 피연산자의 값을 더한 후 다시 변수에 저장 -= x -= 2 좌측 변수의 값에서 우측 피연산자의 값을 뺀 후 다시 변수에 저장 *= x *= 2 좌측 변수의 값과 우측 피연산자의 값을 곱한 후 다시 변수에 저장 /= x /= 2 좌측 변수의 값을 우측 피연산자의 값으로 나눈 후 다시 변수에 저장 %= x %= 2 좌측 변수의 값을 우측 피연산자의 값으로 나눈 나머지를 변수에 저장 &= x &= y 좌측 변수의 값을 우측 피연산자의 값과 논리곱 연산 수행한 결과를 변수에 저장 |= x |= y 좌측 변수의 값을 우측 피연산자의 값과 논리합 연산 수행한 결과를 변수에 저장 ^= x ^= y 좌측 변수의 값을 우측 피연산자의 값과 배타적 논리합 연산 수행한 결과를 변수에 저장
삼항(조건) 연산자
- (true/false로 반펼 가능한 조건식) ? (true일 때의 결과 값) : (false일 떄의 결과 값)
- 첫 번째 항의 조건을 판별하여 true이면 두 번째 항을 결과로 취하고, false이면 세 번째 항을 결과로 취한다.
- 엑셀의 IF() 함수의 사용법과 비슷하다.
연산 우선순위
우선순위 연산자 연산 방향 1 증감(++, --), 부호(+, -), 비트(~), 논리(!) ← 2 산술(*, /, %) → 3 산술(+, -) → 4 쉬프트(<<, >>, >>>) → 5 비교(<, >, <=, >=, instanceof) → 6 비교(==, !=) → 7 논리(&) → 8 논리(^) → 9 논리(|) → 10 논리(&&) → 11 논리(||) → 12 조건(?:) → 13 대입(=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=) ←