본문 바로가기
Programming Language/Java

Java : boolean, 비교 연산자(comparison), 단축평가(short circuit)

by CAP.HEK 2024. 1. 18.

Boolean Type

Boolean Type은 1 Byte (8bit)를 차지합니다.

1 Byte(8bit)가 메모리상 컴퓨터가 가장 쉽게 처리 할 수 있는 단위기 때문입니다.

다음은 예시입니다.

        boolean bool1 = !true;  // false 반환
        boolean bool2 = !false;// true 반환

        boolean bool3 = !!bool1; // false 반환
        boolean bool4 = !!!bool3; // true 반환

        boolean bool5 = !(false); // true 반환
        boolean bool7 = !((5 / 2) == 2.5); 
        // -> !(2 == 2.5) -> !(false) -> true
        boolean bool8 = !((3f + 4.0 == 7) != ('A' < 'B'));
//        -> !((true)!=(true)) -> !(false) -> true

비교 연산자

어느 쪽이 큰 지 작은 지, 같은 지를 반환하는 연산자입니다.

        //같은 문자열인지 여부 반환
        boolean bool1 = 'A' == 'A';// true 반환
        boolean bool2 = 'A' == '가'; // false 반환

        // 숫자와 비교할 시 해당 정수값 기준으로 큰지 작은지 확인
        boolean bool3 = '1' == 49; // true 반환
        boolean bool4 = 'A' > 64.0; // true 반환
        boolean bool5 = 'A' > 66f;// false 반환

        // 사전 순서로 먼저 오는 쪽이 작음
        boolean bool6 = 'A' < 'B'; // true 반환
        boolean bool7 = '가' > '나'; // false 반// false 반

단축 평가 (Short Circuit)

란 쉽게 말해서 '뒤는 볼 필요도 없다!' 입니다.

int a = 1, b = 2, c = 0, d = 0, e = 0, f = 0;

        boolean bool1 = a < b && c++ < (d + -3);
// &&(and) 일 경우 양쪽 다 true 여야 true 가 됩니다. 
// 하지만 bool1의 c++ < (d + -3)이 false기 때문에 false가 반환 됩니다.
        boolean bool2 = a < b || e++ < (f += 3);
// bool2 는 ||(or) 이면서 a < b 가 true입니다. 따라서 뒤쪽은 볼 필요도 없이
// true가 반환 됩니다.
        boolean bool3 = a > b && c++ < (d += 3);
        boolean bool4 = a > b || e++ < (f += 3);

        // 삼항 연산자 : a ? b : c
        // a가 true 일때 b 반환. false면 c 반환

        int num1 = 3, num2 =4;
        char num10E = num1 % 2 == 1 ? '홀' : '짝';
        char num20E = num2 % 2 == 1 ? '홀' : '짝';

        int num =3;
        // 아래 값을 바꾸며 실행
        boolean mult2 = true;
        //mult2 = false;
        boolean plus5 = true;
        //plus5 = false;

        // 헷갈리기 쉬운 단축평가, boolean, 삼항연산 
        System.out.println(
                (!mult2 && !plus5)? num
                // false && false) -> false. 다음 : 으로 넘어감
                        : (mult2 && plus5) ? num * 2 + 5
                         // true 기 때문에 11 출력 끝. 아래는 출력되지 않음
                        : mult2 ? num * 2
                        : num + 5
        );