티스토리에 저장했던 글을 옮겼습니다.
https://mrcocoball.tistory.com/57?category=1098996
https://mrcocoball.tistory.com/58?category=1098996
Chapter 3. 연산자
1. 연산자와 연산식
(1) 연산자의 종류
- x + y 에서 x,y는 피연산자(operand), +는 연산자(operator), 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것을 연산식(expression) 이라고 함
- Java에서 제공하는 연산자
연산자 종류 | 연산자 | 피연산자 수 | 산출값 | 기능 |
---|
산술 | +, -, *, /, % | 이항 | 숫자 | 사칙연산 및 나머지 계산 |
부호 | +, - | 단항 | 숫자 | 음수와 양수의 부호 |
문자열 | + | 이항 | 문자열 | 두 문자열을 연결 |
대입 | \=, +=, -=, *=, /=, %= | 이항 | 다양 | 우변의 값을 좌변의 변수에 대입 |
증감 | ++, -- | 단항 | 숫자 | 1만큼 증가/감소 |
비교 | \==, !=, >, <, >=, <=, instanceof | 이항 | boolean | 값의 비교 |
논리 | !, &, |, &&, || | 단항 이항 | boolean | 논리 부정, 논리곱, 논리합 |
조건 | (조건식) ? A : B | 삼항 | 다양 | 조건식에 따라 A, B 중 하나 선택 |
- 연산식은 반드시 하나의 값을 산출하며 값 대신에 연산 식을 사용할 수 있음
- 연산식은 다른 연산식의 피연산자 위치에 올 수 있음
boolean result = (x + y) < 5;
(2) 연산의 방향과 우선 순위
- 대부분의 연산자는 왼쪽에서 오른쪽 방향 (→) 으로 연산을 수행
100 * 2 / 3 % 5
- 단항 연산자 (++, --, ~, !), 부호 연산자 (+, -), 대입 연산자 (=, +=, -=, ...)는 오른쪽에서 왼쪽 방향 (←) 으로 연산 수행
a = b = c = 5;
- 연산의 방향과 우선순위
ㄱ. 단항, 이항, 삼항 연산자 순으로 우선순위를 가짐
ㄴ. 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가짐
ㄷ. 단항, 부호, 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽 (→)
ㄹ. 복잡한 연산식에는 괄호()를 사용하여 우선순위 지정
연산자 | 연산 방향 | 우선순위 |
---|
증감(++, --), 부호(+,-), 논리(!) | ← | 높음 낮음 |
산술(*, /, %) | → | |
산술(+, -) | → | |
비교(<, >, <=, >=, instanceof) | → | |
비교(==, !=) | → | |
논리(&) | → | |
논리(^) | → | |
논리(|) | → | |
논리(&&) | → | |
논리(||) | → | |
조건(?:) | → | |
대입(=, +=, -=, *=, /= %=) | ← | |
2. 연산자의 종류
(1) 단항, 이항, 삼항 연산자
- 필요로 하는 피연산자 수에 따라 단항, 이항, 삼항 연산자로 구분
ㄱ. ++x; 단항 연산자
ㄴ. x + y; 이항 연산자
ㄷ. (sum >90) ? "A" : "B"; 삼항 연산자
(2) 단항 연산자
- 피연산자가 단 하나뿐인 연산자이며 부호 연산자(+,-), 증감 연산자(++, --), 논리 부정 연산자(!)가 있음
- 부호 연산자(+,-) : 양수 및 음수를 표시, boolean 및 char 타입을 제외한 나머지 기본 타입에 사용
ㄱ. + 피연산자 : 피연산자의 부호 유지
ㄴ. - 피연산자 : 피연산자의 부호 변경
ㄷ. 부호 연산자의 결과가 int 타입이므로 byte 등의 타입은 컴파일 에러 발생
- 증감 연산자(++, --) : 변수의 값을 1 증가(++) 혹은 감소(--) 시키는 연산자, boolean 제외 기본 타입 사용 가능
ㄱ. ++ 연산자 : 증가 연산자라고 하며 피연산자의 값에 1을 더해서 그 결과를 다시 저장
ㄴ. -- 연산자 : 감소 연산자라고 하며 피연산자의 값에 1을 빼서 그 결과를 다시 저장
ㄷ. 증가 연산자와 감소 연산자는 변수의 앞뒤 어디에든 올 수 있는데, 다른 연산자와 사용 시 위치에 따라 결과가 달라짐
- '증감 연산자' 변수 : 변수값을 먼저 증감한 후 다른 연산자 처리
- 변수 '증감 연산자' : 다른 연산자를 처리한 후 변수값을 증감
int x = 1;
int y = 1;
int result1 = ++x + 10;
int result2 = y++ + 10;
- 논리 부정 연산자(!) : true를 false로, false를 true로 변경하며 boolean 타입에만 사용 가능, !변수
ㄱ. 조건문, 제어문에서 조건식의 값을 부정하도록 하여 실행 흐름을 제어할 때 사용
ㄴ. true, false를 번갈아가며 변경하는 토글 기능을 구현할 때 사용
(3) 이항 연산자
- 피연산자가 2개인 연산자이며 산술 연산자
(+, -, *, /, %)
, 문자열 결합 연산자(+)
, 비교 연산자(<, <=, >, >=, ==, !=)
,논리 연산자(&&, ||, &, |, ^, !)
, 대입 연산자(=, +=, *=, /=, %=)
등이 있음
- 산술 연산자
(+, -, *, /, %)
: 사칙 연산과 나머지를 구하는 %까지 총 5개, boolean을 제외한 모든 기본 타입에 사용. 피연산자들의 타입이 동일하지 않을 경우 특정 규칙을 사용해 피연산자들의 타입을 일치시킨 후 연산 수행
- 피연산자들이 byte, short, char 타입일 경우 모두 int 타입으로 변환 (큰 범위)
- 피연산자들이 모두 정수 타입이고 long 타입이 포함될 경우 모두 long 타입으로 변환 (큰 범위)
- 피연산자들 중 실수 타입(float, double)이 있을 경우 허용 범위가 큰 실수 타입으로 변환
- 나누기 진행 시 이전에 배운 허용 범위 및 강제 변환 내용 참고할 것
- char 타입도 정수 타입이므로 산술 연산이 가능하나, int 타입으로 변환되므로 결과는 int 타입이 됨
- 문자열 결합 연산자
(+)
: 문자열을 서로 결합하는 연산자로 피연산자 중 한 쪽이 문자열이면
서로 다른 피연산자를 문자열로 변환하고 서로 결합
- 비교 연산자
(<, <=, >, >=, ==, !=)
: 피연산자의 대소 또는 동등을 비교, true/false를 산출하며 boolean 제외한 기본 타입에 사용
ㄱ. 흐름 제어문인 조건문(if), 반복문(for, while)에서 주로 이용, 실행 흐름을 제어
ㄴ. 피연산자가 char 타입일 경우 유니코드 값으로 비교 연산을 수행
ㄷ. 연산을 수행하기 전 피연산자의 타입을 일치시킴. 예를 들어 'A' == 65의 경우 'A'가 int 타입의 65로 변환됨
ㄹ. 단, 0.1 == 0.1f와 같은 경우는 float의 부동 소수점 방식이 0.1을 정확하게 표현할 수 없어
모두 float으로 변환하거나 int 타입으로 변환해서 비교해야 함
ㅁ. String 변수 비교 시 대소 비교는 불가하고 동등 비교는 사용할 수 있으나 문자열이 같은지 다른지를 비교하는 용도로는 사용 X
(전에 배웠던 equals() 메소드 사용)
- 논리 연산자
(&&, ||, &, |, ^, !)
: 논리곱(&&), 논리합(||), 배타적 논리합(^), 논리 부정(!) 연산을 수행, boolean 타입만 적용
ㄱ. 논리곱 (AND) : && 또는 &, 피연산자 모두가 true 일 경우에만 연산 결과 true
ㄴ. 논리합 (OR) : || 또는 |, 피연산자 중 하나라도 true이면 결과 true
ㄷ. 배타적 논리합 (XOR) : ^, 피연산자가 하나는 true이고 다른 하나가 false일 경우에만 true
ㄹ. 논리 부정 (NOT) : !, 피연산자의 논리값을 바꿈
ㅁ. &&와 &의 차이 (||와 |의 차이) : 산출 결과가 동일하나 연산 과정이 다름.
&&는 앞의 피연산자가 false일 경우 뒤의 피연산자 평가 없이 산출 결과를 내나
&의 경우 두 피연산자 모두를 평가해서 결과를 내므로 &&가 효율적으로 더 작동함
- 대입 연산자
(=, +=, -=, *=, /=, %=)
: 오른쪽 피연산자의 값을 왼쪽 피연산자인 변수에 저장
ㄱ. 대입 연산자는 모든 연산자들 중 가장 낮은 연산 순위를 가지고 있어 제일 마지막에 수행됨
ㄴ. 진행 방향이 오른쪽에서 왼쪽 (←)임
(4) 삼항 연산자
- 피연산자가 3개인 연산자이며, ? 앞의 조건식에 따라 : 앞뒤의 피연산자가 선택되어 조건 연산식으로 부르기도 함
- 형태
조건식(피연산자1) ? 값 또는 연산식(피연산자2) : 값 또는 연산식(피연산자3)