자바(JAVA)/미니 프로젝트 & 기초 공부

Java 기초 또 다시 공부하기 4일차 - 연산자와 연산식, 조건문

개발학생 2025. 5. 22. 17:41
반응형

1. 연산자와 연산식

  • 연산자(operator): 연산에 사용되는 표시나 기호
  • 피연산자(operand): 연산자와 함께 연산되는 데이터
  • 연산식(expression): 연산자와 피연산자로 연산 과정을 기술한 것

1) 단항 연산자(피연산자가 단 하나뿐인 연산자)

(1) 부호 연산자(양수와 음수를 표시하는 +, -): char을 제외한 나머지 기본 타입에 사용 가능

연산식 예시 설명
+ 피연산자 피연산자의 부호 유지
- 피연산자 피연산자의 부호 변경

(2) 증감 연산자(++, --): 변수의 값을 증가하거나 감소하게 하며, boolean을 제외한 모든 기본 타입에 사용 가능

  • ++i와 i+1의 연산 속도에 차이는 없음 
연산식 예시 설명
++ 피연산자 다른 연산 수행 전, 피연산자 값을 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' 출력

삼항연산자 사용 예시

*연산의 방향과 우선순위

  • 수학과 같이, 덧셈 뺄셈보다 곱셈 나눗셈 연산자가 우선 처리됨
  • 단항/부호/대입 연산자는 오른쪽 방향에서 왼쪽 방향으로 연산 수행 

사용예시1: 자바 컴파일러 사이트(https://www.mycompiler.io/ko/new/java)

  1. --b (전위 감소 연산) → b = 9
  2. c += a (c = c + a) → c = 25
  3. b * c (곱셈) → 9 * 25 = 225
  4. 225 / 5 (나눗셈) → 45
  5. 45 % 3 (나머지 연산) → 0
  6. a + 0 (덧셈) → 5
  7. 5 - 9 (뺄셈) → -4
  8. -4 + 25 (덧셈) → 21
연산의 방향 및 우선순위 예시

사용예시2: 자바 컴파일러 사이트(https://www.mycompiler.io/ko/new/java)

 

  1. -z (전위 감소 연산) → z = 4
  2. y % x (나머지 연산) → 3 % 8 = 3
  3. --z / (y % x) (나눗셈) → 4 / 3 = 1 (int 타입이므로 소수점 이하 버림)
  4. x * y (곱셈) → 8 * 3 = 24
  5. x * y + --z / (y % x) (덧셈) → 24 + 1 = 25
  6. (x * y + --z / (y % x)) << 2 (비트 시프트 연산) → 25 << 2 = 100
  7. z += y (z = z + y) → z = 7
  8. (z += y) & x (비트 AND 연산) → 7 & 8 = 0
  9. (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문 
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가 모두 있다면 한 번만 실행됨

 

반응형