1. 연산자와 연산식
연산자(operator): 연산에 사용되는 표시나 기호
피연산자(operand): 연산자와 함께 연산되는 데이터
연산식(expression): 연산자와 피연산자로 연산 과정을 기술한 것
1) 단항 연산자(피연산자가 단 하나뿐인 연산자)
(1) 부호 연산자(양수와 음수를 표시하는 +, -): char을 제외한 나머지 기본 타입에 사용 가능
연산식 예시
설명
+ 피연산자
피연산자의 부호 유지
- 피연산자
피연산자의 부호 변경
(2) 증감 연산자(++, --): 변수의 값을 증가하거나 감소하게 하며, boolean을 제외한 모든 기본 타입에 사용 가능
연산식 예시
설명
++ 피연산자
다른 연산 수행 전, 피연산자 값을 1 증가시킴
-- 피연산자
다른 연산 수행 전, 피연산자 값을 1 감소시킴
++ 피연산자
다른 연산 수행 후, 피연산자 값을 1 증가시킴
-- 피연산자
다른 연산 수행 후, 피연산자 값을 1 감소시킴
(3) 논리 부정 연산자
연산식 예시
설명
! 피연산자
피연산자가 true면 false 값을 산출하고, 피연산자가 false면 true 값을 산출
2) 이항 연산자(피연산자가 2개인 연산자)
(1) 산술 연산자(+, -, *, /, %): boolean을 제외한 모든 타입에 사용 가능
연산식 예시
설명
피연산자1 + 피연산자2
덧셈 연산
피연산자1 - 피연산자2
뺄셈 연산
피연산자1 * 피연산자2
곱셈 연산
피연산자1 / 피연산자2
피연산자1을 피연산자2로 나누는 연산
피연산자1 % 피연산자2
피연산자1을 피연산자2로 나눈 나머지를 구하는 연산
(2) 문자열 결합 연산자(+): 피연산자 중 한쪽이 문자열이면 +연산자는 문자열 결합 연산자로 사용
String str1 = "JDK" + 11.0;
System.out.println(str1); // "JDK11.0" 출력
System.out.println(5 + 12.0 + "JDK"); // "17.0JDK" 출력
(3) 비교 연산자(<, <=, >, >=, ==, !=): 피연산자의 크기 또는 동등을 비교하여 true/false를 산출
구분
연산식 예시
설명
동등 비교
피연산자1 == 피연산자2
두 피연산자의 값이 같은지 비교
피연산자1 != 피연산자2
두 피연산자의 값이 다른지 비교
크기 비교
피연산자1 > 피연산자2
피연산자1이 2보다 큰지 비교
피연산자1 >= 피연산자2
피연산자1이 2보다 크거나 같은지 비교
피연산자1 < 피연산자2
피연산자1이 2보다 작은지 비교
피연산자1 <= 피연산자2
피연산자1이 2보다 작거나 같은지 비교
(4) 논리 연산자(&&, ||, &, |, ^, !): 피연산자는 boolean만 사용 가능
구분
설명
연산식 예시
결과
AND(논리곱)
피연산자 모두가 true일때만 연산 결과가 true
true && 또는 & true
true
true && 또는 & false
false
false && 또는 & true
false
false && 또는 & false
false
OR(논리합)
피연산자 중 하나만 true이면 연산 결과는 true
true || 또는 | true
true
true || 또는 | false
true
false || 또는 | true
true
false || 또는 | false
false
XOR(배타적 논리합)
피연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산 결과가 true
true ^ true
false
true ^ false
true
false ^ true
true
false ^ false
false
NOT(논리 부정)
피연산자의 논리값을 바꿈
!true
false
!false
true
(5) 대입 연산자(=, +=, -=, *=, /=, %=): 모든 연산자 중 가장 낮은 연산 순위로, 연산 진행 방향은 오른쪽에서 왼쪽
구분
연산식 예시
설명
단순 대입 연산자
변수 = 피연산자
피연산자 값을 변수에 저장
복합 대입 연산자
변수 += 피연산자
변수=변수+피연산자
변수 -= 피연산자
변수=변수-피연산자
변수 *= 피연산자
변수=변수*피연산자
변수 /= 피연산자
변수=변수/피연산자
변수 %= 피연산자
변수=변수%피연산자
변수 &= 피연산자
변수=변수&피연산자
변수 |= 피연산자
변수=변수|피연산자
변수 ^= 피연산자
변수=변수^피연산자
3) 삼항 연산자(?:): 3개의 피연산자를 필요로 하는 연산자
조건식(피연산자1) ? 값 또는 연산식(피연산자2) : 값 또는 연산식(피연산자 3) -> 조건식이 참이면 피연산자2를, 조건식이 거짓이면 피연산자3을 반환
// 삼항연산자를 이중으로 사용: 실제로는 이렇게까지 쓰지 않음
int score = 95;
char grade = (score >= 90) ? 'A' : ((score>=80) ? 'B' : 'C');
System.out.println(grade); // 'A' 출력
삼항연산자 사용 예시
*연산의 방향과 우선순위
수학과 같이, 덧셈 뺄셈보다 곱셈 나눗셈 연산자가 우선 처리됨
단항/부호/대입 연산자는 오른쪽 방향에서 왼쪽 방향으로 연산 수행
--b (전위 감소 연산) → b = 9
c += a (c = c + a) → c = 25
b * c (곱셈) → 9 * 25 = 225
225 / 5 (나눗셈) → 45
45 % 3 (나머지 연산) → 0
a + 0 (덧셈) → 5
5 - 9 (뺄셈) → -4
-4 + 25 (덧셈) → 21
연산의 방향 및 우선순위 예시
-z (전위 감소 연산) → z = 4
y % x (나머지 연산) → 3 % 8 = 3
--z / (y % x) (나눗셈) → 4 / 3 = 1 (int 타입이므로 소수점 이하 버림)
x * y (곱셈) → 8 * 3 = 24
x * y + --z / (y % x) (덧셈) → 24 + 1 = 25
(x * y + --z / (y % x)) << 2 (비트 시프트 연산) → 25 << 2 = 100
z += y (z = z + y) → z = 7
(z += y) & x (비트 AND 연산) → 7 & 8 = 0
(x * y + --z / (y % x)) << 2 | (z += y) & x (비트 OR 연산) → 100 | 0 = 100
연산의 방향 및 우선순위 예시2
2. 조건문
1) if문
조건식의 결과에 따라 블록 실행 여부를 결정
조건식 블록에는 true 또는 false를 산출 가능한 연산식, boolean 타입 변수가 올 수 있음
if ( 조건식 ) {
// 조건식이 true
실행문A
}
// 조건식이 false
실행문B
2) if-else문
if문이 조건식이 true면 if문 블록이 실행되고, false면 else 블록 실힝]
if ( 조건식 ) {
// 조건식이 true
실행문A
} else {
// 조건식이 false
실행문B
}
3) if-else if-else문
if( 조건식1 ) {
// 조건식1이 true
실행문A
} else if( 조건식2 ) {
// 조건식1이 false, 조건식2가 true
실행문B
} else {
// 조건식 1, 2가 false
실행문C
}
실행문D
if-else if-else문 예시
4) switch문
변수가 어떤 값을 갖느냐에 따라 실행문이 선택됨
switch( 변수 ) {
case 값1:
/* 변수가 값1일 경우 */
실행문A;
break;
case 값2:
/* 변수가 값2일 경우 */
실행문B;
break;
case 값3:
/* 변수가 값3일 경우 */
실행문C;
break;
default:
/* 변수가 값1, 값2, 값3이 아닐 경우 */
실행문D;
break;
}
switch문: break가 아예 없을 때 모든 case가 실행됨
switch문: break가 모두 있다면 한 번만 실행됨