ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. 자바 변수와 자료형 (2) boolean
    자바(Java) 강의 2019. 3. 3. 15:15

    이 포스트에서는 자바 프로그래밍 언어의 기본 자료형인 char, boolean, byte, short, int, long, float, double중에서 boolean에 대해 알아보도록 하겠다. 

    예상 독자

    목표

    • boolean
    • 논리식 (boolean expression 또는 logical expression)

    boolean

    boolean자료형의 값에는 참/거짓(true/false) 딱 2가지만이 있다. 실습으로 배워보자.

    public class Main {
    public static void main(String[] args) {
    System.out.println(true);
    }
    } 실행 결과: true

    이번엔 false를 출력 해 보자.

    public class Main {
    public static void main(String[] args) {
    System.out.println(false);
    }
    } 실행 결과:

    false

    이번엔 변수 expression에 할당 해 보자. 

    public class Main {
    public static void main(String[] args) {
    boolean expression = true;
    System.out.println(expression);
    }
    } 실행 결과:

    true

    expression에 들어있는 값이 'true'이기 때문에 true를 출력하는 것을 알 수 있다. 이번엔 fasle도 해 보자.

    public class Main {
    public static void main(String[] args) {
    boolean expression = false;
    System.out.println(expression);
    }
    } 실행 결과:

    false

    expression에 false가 들어있기 때문에 false가 출력되는 것을 확인 할 수 있다. 이게 다이다. boolean자료형은 이렇게 간단하다. 

    논리식 (boolean expression 또는 logical expression)

     프로그래밍 언어에서 논리식(boolean expression/logical expression)이란, 어떤 식(expression)의 계산값이 참 또는 거짓인 식을 말한다. 예를 들어 생각 해 보자. 
    • 삐멜은 소프트웨어 엔지니어인가? - 참
    • 자바는 프로그래밍 언어인가? - 참
    • boolean에는 참/거짓이외의 값을 넣을 수 있는가? - 거짓
    인간의 언어로 생각 했을 때 위의 질문들이 바로 boolean expression이다. 그렇다면 프로그래밍 언어에서 boolean expression은 어떻게 표현 할까? 자바에서는 boolean expression을 표현하기 위해 ==, <, <=, >, >=, &&, ||, ! 같은 논리 연산자(boolean operator)들을 사용한다

    ==, <, <=, >, >=

    • 삐멜의 직업 == 소프트웨어 엔지니어 ? 참
    • 138 < 193 ? 참
    • 33 <= 0 ? 거짓
    • 20 > 20 ? 거짓 
    • 10 >= 9 ? 참
    예를들어 살펴보자. 138 < 193을 출력 해 보자. 갑자기 숫자가 나왔다고 놀라지 말자. 정수형이라는 자료형인데 바로 이후의  포스트에서 설명 할 것이다. 지금 나오는 숫자들에 대해서는 상식적인 선에서 생각하면 된다.

    public class Main {
    public static void main(String[] args) {
    System.out.println(138 < 193);
    }
    } 실행 결과: true

    33 <= 0 을 출력 해 보자. <=는 작거나 같다 라는 뜻이다. 마찬가리고 >=는 크거나 같다는 뜻이다.
    public class Main {
    public static void main(String[] args) {
    System.out.println(33 <= 0);
    }
    } 실행 결과: false
    대충 이게 뭔지 감이 오는가? 그렇다면 나머지 두 경우를 연습으로 혼자 해보도록 해라. 
    이런 boolean 식(expression)은 꼭 숫자에만 해당되는 것이 아니다. 아래를 보자.

    public class Main {
    public static void main(String[] args) {
    char character = 'c';
    System.out.println(character == 'c');
    }
    } 실행 결과: true

    지난 포스트에서 다뤘던 char 자료형의 변수 character를 만들어 'c'를 할당했다. 그리고 character == 'c'를 비교했다. character에 'c' 가 할당되어 있기 때문에 두 값은 같은 char값 'c'이다. 따라서 true의 결과가 나온다.  character의 값을 'a'로 바꾸고 실행 해 보아라. 그리고 결과 값이 false가 나오는지 확인 해 보아라.

    public class Main {
    public static void main(String[] args) {
    char character = 'c';
    boolean expression = (character == 'c');
    System.out.println(expression);
    }
    } 실행 결과:

    true

    character == 'c'는 그 결과 값이 boolean이기 때문에 당연히 boolean형의 변수에 할당 가능하다. 위를 실행 해 보자. boolean형인 expression에 (character == 'c') 우리가 System.out.println에 넣어줬던 식과 똑같은 식을 할당했다. 이 식의 결과값이 boolean이기 때문에 아무 에러 없이 실행된다.
    참고! () <-괄호는 사실 필요 없다. 초심자들이 =와 ==를 자주 헷갈려 하는 것을 고려해 괄호로 어느부분이 할당부분이고 어느부분이 식(expression)부분인지 나눠놓았다. 익숙해지면 괄호 없이 사용 해 보도록 하자.

    && (논리 AND 연산자)

    이번엔 && 에 대해서 알아보자. && 은 AND라는 뜻이다. expression 1 AND expression 2 에서 expression 1과 expression 2가 모두 참일 때만 true이고 나머지는 모두  false이다.

    public class Main {
    public static void main(String[] args) {
    char character = 'c';
    boolean expression = (character == 'c') && (3 < 10);
    System.out.println(expression);
    }
    } 실행 결과:

    true

    위의 예제에서 expression1은 (charadter == 'c') 이고 expression2는 (3 < 10)이다. 첫번째 식이 참이고, 두번째 식도 참이므로 true && true는  true가 된다. 10을 -1로 바꿔보자.

    public class Main {
    public static void main(String[] args) {
    char character = 'c';
    boolean expression = (character == 'c') && (3 < -1);
    System.out.println(expression);
    }
    } 실행 결과:

    false

    10을 -1로 바꾸면 첫번째 식인 (character == 'c')는 참이지만 (3 < -1)은 거짓이다. 따라서 true && false는 false가 된다.
    [논리 AND 연산자 표]

    식(expression) 

     값

     true && true

    true 

     true && false

    false 

     false && true

    false 

     false && false

    false 

    || (논리 OR 연산자)

    ||에 대해서 알아보자. AND다음에 나왔으니 감이 오지 않는가? 그렇다 얘는 OR를 뜻하는 boolean 연산자이다. expression 1 || expression 2이렇게 하면 두 식중 하나만 참이면 참이다. 두 식 모두 거짓이어야 거짓이된다. 예제를 보자.
    public class Main {
    public static void main(String[] args) {
    char character = 'c';
    boolean expression = (character == 'c') || (3 < -1);
    System.out.println(expression);
    }
    } 실행 결과: true
    위의 예제는 &&를 이용했던 것과 다르게 값이 true인 것을 확인 할 수 있다. 왜? 비록 (3 <- 1)이 false일지라도 (character == 'c')가 참이므로 true || false는 true가 된다.
    [논리 OR 연산자 표]

    식 (expression) 

     결과

     true || true

    true 

     true || false

    true 

     false || true

    true 

     false || false

    false 

    ! (논리 NOT 연산자)

    ! 연산자는 boolean 값을 그 반대로 변경한다. true앞에 !true하고 !를 붙이면 Not true, 즉 false가 된다.

    public class Main {
    public static void main(String[] args) {
    boolean expression = true;
    System.out.println(!expression);
    }
    } 실행 결과: false

    이번엔 expression에 false를 넣고 실행 해 보라. true가 나오는가? ! 의 의미가 이해되는가?
    [논리 NOT 연산자 표]

    식 (Expression) 

     결과

     !true 

     false

     !false

     true

     boolean expression에서 왜 &가 아닌 &&를 사용하고 |가 아닌 ||를 사용할까? 아쉽게도 &와 |는 이미 비트연산자(bitwise expression)이라는 연산 기호로 사용되고 있기 때문에 논리식에서는 &&와 ||를 사용하고 있다. 그래서 비트 연산자와 헷갈리지 않기 위해 논리 AND, 논리 OR등으로 부르는 것이다. &와 &&는 다른 연산자이기 때문에 주의해야한다. 또 =와 ==도 다른 연산자이므로 주의해야한다. 처음 자바를 배울 때 많이 하는 실수 중 하나가 =와 ==를 혼동해서 사용하는 것이다. =는 변수에 값을 할당할 때 쓰는 것이고 ==는 비교 할 때 사용하는 연산자라는 사실을 잊지 말자. 다음 포스트에서는 정수형에 대해 설명하도록 하겠다.


    다음 포스트: 2. 자바 변수와 자료형 (3) byte, short, int, long



    댓글

f.software engineer @ All Right Reserved