연산자(관계,논리,빠른평가,삼항) - 16

연산자(관계,논리,빠른평가,삼항)  - 16

1. 관계(비교)연산자

  • 이항 연산자
  • 연산의 결과가 true(참), false(거짓)으로 반환 됨, 비교연산자 라고도 함
  • 조건문, 반복문의 조건식으로 많이 사용 됨

 

관계 연산자를 주어로 바라보고 하는 말이 사실인지 거짓인지 확인 하자.

code. Operation5

package basic.ch03;

/**
 * 관계, 비교 연산자
 * 연산의 결과 값이 무조건 true, false로 반환 된다.
 */
public class Operation5 {

	public static void main(String[] args) {
		
		int num1 = 5;
		int num2 = 3;
		
		// 관계 연산자를 주어로 바라보자
		boolean value = ( num1 > num2 );
		System.out.println(value);
		
		System.out.println(3 < 5);
		System.out.println(3 >= 10);
		System.out.println(3 <= 3);
		System.out.println(3 == 5);
		System.out.println(3 != 2);
		System.out.println("------------------------");
		
		//                  5        3
		System.out.println(num1 <  num2);
		System.out.println(num1 >= num2);
		System.out.println(num1 <= num2);
		System.out.println(num1 == num2);
		System.out.println(num1 != num2);
		
		
		
		
	} // end of main

} // end of class

 

2.  논리 연산자

  • 관계 연산자와 혼합하여 많이 사용 됨
  • 연산의 결과가 true(참), false(거짓)으로 반환 됨

code. Operation6

package basic.ch03;

/**
 * 
 * 논리 연산자
 * 관계 연산자와 혼합하여 많이 사용 된다.
 * 연산의 결과는 true, false로 반환 된다.
 * 
 */
public class Operation6 {

	public static void main(String[] args) {
		
		// 논리 연산자는 3가지 종류가 있다.
		// 논리곱 --> && (엠퍼센트,엠퍼센트)
		// 논리합 --> || (버티컬 바, 버티컬 바)
		//  부정  --> !
		
		int num1 = 10;
		int num2 = 20;
		
		// 1. 논리곱(&&)
		//                  T       &&       T
		// 논리곱은 전부 true 이면 true 반환 한다. 하나라도 거짓이면 false를 반환 한다.
		boolean flag1 = (num1 > 0 ) && (num2 > 0);
		System.out.println("flag 1 : " + flag1);
		
		//                  T       &&      F
		boolean flag2 = (num1 > 0 ) && (num2 < 0);
		System.out.println("flag 2 : " + flag2);
		
		System.out.println("===========================");
		
		// 2. 논리 합
		//                    T    ||    F
		// 둘 중에 하나라도 true 이면 연산의 결과는 무조건 true 이다.
		boolean flag3 = (num1 > 0) || (num2 < 0);
		System.out.println("flag 3 : " + flag3);
		
		System.out.println("===========================");
		
		// 3. 부정
		System.out.println("부정 논리 연산자 사용 : " + !flag3);
		// 연산의 결과가 어떻게 되지 --> 확인해봐야지 --> 로깅 한다.
		
		
		System.out.println("flag 3 : " + flag3);
		
		
	} // end of main

} // end of class
 

3.  빠른 평가(short circuit evaluation)

  • 빠른 평가(short-circuit evaluation)는 논리 연산에서 첫 번째 조건이 결과를 결정하는 경우, 두 번째 조건을 평가하지 않는 자바의 특성입니다.
    • 논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true
      앞의 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음
    • 논리 합(||)은 두 항의 결과가 모두 false일 때만 결과가 false
      앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음
package basic.ch03;

/**
 * 
 * 빠른 평가란?
 * 논리 연산에 있어 첫 번째 조건이 결과를 결정할 때
 * 두 번째 조건을 평가 하지 않는 것을 의미한다.
 * 
 */
public class Operation7 {

	public static void main(String[] args) {
		
		int number = 5;
		int index = 0;
		
		// 빠른 평가가 동작하는 식을 만들어 보자.
		//                                   F        
		//                           15           < 10
		boolean result = ( (number = number + 10) < 10 ) && ( (index = index + 2) < 10 );
		System.out.println("현재 number 변수의 값은 : " + number);
		// 더 고민해 볼것
		System.out.println("현재 index 변수의 값은 : " + index); // 결과 0
		
		System.out.println("===================================");
		
		// number 값 재설정
		number = 5;
		// 논리합을 이용한 빠른 평가 식을 만들어 보자.
		
		//               F              ||         T
		result = ( (number += 10) < 10) || ( (index += 2) < 10);
		
		// 문제
		System.out.println("현재 number 변수의 값은 : " + number);
		System.out.println("현재 index 변수의 값은 : " + index); 
		System.out.println("===================================");
		
		// 도전 문제 number 와 index 반대로 변경해서 출력해보자.
		
		result = ( (index += 2) < 10) || ( (number += 10) < 10);
		System.out.println("현재 number 변수의 값은 : " + number);
		System.out.println("현재 index 변수의 값은 : " + index);
		
		
	} // end of main

} // end of class

 

고민해 볼 것
 
boolean result = ( (number = number + 10) < 10 ) && ( (index = index + 2) < 10 );
// 논리곱을 연산하는데 첫번째 조건이 false 이라 두번째 조건은 연산하지 않음
// 따라서
System.out.println("현재 index 변수의 값은 : " + index); // 결과 0

// 마찬가지로
result = ( (index += 2) < 10) || ( (number += 10) < 10);
// 논리합을 연산하는데 첫번째 조건이 true 라 두번째 조건은 연산하지 않음

 

언제 논리 연산자를 쓰게 될지 모르겠지만 논리곱 논리합 사용시 주의해야함

 

4. 삼항 연산자(조건 연산자)

  • 조건식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 결과가 수행됨
  • if (조건문)을 간단히 표현할 때 사용 할 수 있음

 

code. Operation8

package basic.ch03;


// 수입하다, 가지고 오다
import java.util.Scanner;

/**
 * 
 * 삼항 연산자(조건 연산자)
 * 변수 변수명 = 조건식 ? 결과1 : 결과2
 * 
 */
public class Operation8 {

	public static void main(String[] args) {
		
		System.out.println("입력 받은 두 수 중에 큰 수를 출력하세요");
		
		// 자바 특징 --> 풍부한 라이브러리를 지원한다
		// JDK --> 표준 라이브러리(자바 개발자들이 만들어준 기능, 도구)를 사용해보자.
		// 데이터 타입( 특징 : )
		// 콘솔창에서 사용자가 키보드로 입력한 값을 받아 주는 녀석
		Scanner sc = new Scanner(System.in);
		int x = sc.nextInt(); // 사용자가 입력한 정수값을 받아 주는 녀석
		System.out.println("x가 받은 값은 : " + x);
		int y = sc.nextInt();
		System.out.println("y가 받은 값은 : " + y);
		System.out.println("--------------------------------------------");
		
		//        조건식 ? 결과1: 결과2;
		int max = x > y  ?   x  :   y;
		System.out.println("두 수 중 큰 수는 " + max + " 입니다.");
		
		//자원 닫기
		sc.close();
		
	} // end of main

} // end of class

* Scanner 클래스 소스 보는법 (ctrl + 좌클릭)

* 프로그램이 실행 중인지 확인하는 법 : 네모칸에 빨간색 칠이 되어있음

 

5. 연산자 우선순위

우선순위 연산자 내용
1 (), [] 괄호 / 대괄호
2 !, ~, ++, -- 부정 / 증감 연산자
3 *, /, % 곱셈 / 나눗셈 연산자
4 +, - 덧셈 / 뺄셈 연산자
5 <<, >>, >>> 비트단위의 쉬프트 연산자
6 <, <=, >, >= 관계 연산자
7 ==, !=  
8 $ 비트단위의 논리연산자
9 ^  
10 |  
11 && 논리곱 연산자
12 || 논리합 연산자
13 ? : 조건 연산자(삼항 연산자)
14 =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, ~= 대입 / 할당 연산자

돌아가기

'Java > Java 기초 문법' 카테고리의 다른 글

조건문 if(만약 … 이라면) - 18  (0) 2024.04.11
연산자 (연습 문제) - 17  (0) 2024.04.11
연산자(복합 대입 연산자) - 15  (0) 2024.04.09
연산자(증감, 감소) - 14  (0) 2024.04.09
연산자(산술) - 13  (0) 2024.04.09