[JAVA] 1. 불 자료형: 불 대수, 단축 평가

YeongJun Son·2023년 3월 20일
0

기본 자료형 Boolean과 불 대수, 단축 평가

불 자료형이란?

  • 불 자료형(Boolean Datatype)은 참(True), 거짓(False)이라는 두 값을 가지는 자료형입니다. 논리 자료형으로도 알려져 있습니다. ‘불’이라는 것은 19세기 중엽 조지 불(George Boole)이 개념화한 것입니다.
  • 불 자료형은 조건문에서 주로 쓰이고, 흐름을 제어하는 데 있어 유용합니다.
    boolean isChecked = true;
    boolean isPassed = false;

불 자료형과 논리 연산자

논리 연산자설명
&&논리식이 모두 참이면 참 반환 (이항연산자)
||논리식 중 하나라도 참이면 참 반환 (이항연산자)
!논리식의 값과 반대인 값을 반환 (단항연산자)
  • 논리 연산자 &&과 ||은 좌우측에 참 혹은 거짓을 값으로 갖는 표현식 둘을 피연산자로 갖습니다.
  • 논리 연산자 !은 우측에 참 혹은 거짓을 값으로 갖는 표현식 하나를 피연산자로 갖습니다.
  • 그런데, 불 자료형에는 연산 값이 사용될 수도 있습니다.
    • 9 > 1 : true
    • 1 == 0 : false
    • "a".equals("z") : false
    • 1 : true / 0: false

불 대수 법칙

Table 1. Boolean Algebra Simplificaiton
  1. 동일 법칙
  • 참 혹은 거짓을 값으로 갖는 A에 1(참)을 AND 연산하면 그 값이 유지되고, 0(거짓)을 OR 연산해도 그 값이 유지됩니다.
  1. 부정 법칙
  • 특정 값에 0을 AND 연산하면 항상 거짓이고, 1을 OR 연산하면 항상 참입니다.
  1. 등멱 법칙
  • 특정 값에 그 값을 AND 연산하거나, OR 연산하면 값이 유지됩니다.
  1. 상보 법칙
  • 특정 값과 그 반대 값을 AND 연산하면 항상 거짓, OR 연산하면 항상 참입니다.
  1. 교환 법칙
  • AND 연산과 OR 연산에서 피연산자 순서를 바꾸어도 결과는 같습니다.
  1. 결합 법칙
  • AND 연산과 OR 연산에서 연산 순서를 바꾸어도 결과는 같습니다.
  1. 분배 법칙
  • 불 대수에서는, AND 연산과 OR 연산으로 얽힌 식에서 분배 법칙을 이용해 식을 간략히 할 수 있습니다.
  1. 흡수 법칙
  • 두 피연산자가 포함 관계에 있다면, AND 연산에서는 부분 집합이, OR 연산에서는 상위 집합이 결과값이 됩니다.
  1. 드모르간 법칙
  • 특정 식에 부정 연산을 할 경우, 각 변수에는 NOT 연산을 한다. 그리고 AND 연산은 OR 연산으로, OR 연산은 AND 연산으로 바꾸어 풀어줄 수 있습니다.

쌍대 원리 (Duality Principle)

  • 불리언 식의 쌍대(dual)는 해당 식에서 AND/OR, 1/0 을 서로 교체해 줌으로써 만들 수 있습니다. 이 때, 한 식의 쌍대는 원래의 식과 결과 값이 동일합니다.
    • 1+0=11 + 0 = 101=00 \cdot 1 = 0

단축 평가 (short-circuit evaluation)

  • 단축 평가는 프로그래밍 언어에서 첫 인자(argument)가 표현식(expression) 값 결정에 부족할 때에만 두 번째 인자가 실행되거나 평가되는 방법을 의미합니다.
if (a && b) {
... // a의 값이 false라면, 두 번째 인자 실행되지 않음.
}

if (a || b) {
... // a의 값이 true라면, 두 번째 인자 실행되지 않음.
}
  • XOR의 경우에는, 당연하게도 두 피연산자를 모두 비교해봐야 하는 까닭에 short-circuit이 불가능합니다.

    • 자바 논리 연산자로는 XOR이 존재하지 않지만, (추후 글을 쓸) 비트 연산자에서는 ^가 XOR 역할을 합니다.
  • 단축 평가는 특정 함수를 호출하거나 하지 않는 흐름 제어에서 효과적이지만, 표현식 실행 이후 값이 달라지는 side-effect가 중요한 언어에서는 주의할 필요가 있습니다. 첫 argument 이후 갱신된 값이 두 번째 argument에서 쓰이기 때문입니다.

  • 또한, 분기 예측(Branch Prediction) 내에서 오류를 일으킬 수 있습니다. 분기 예측은 다음 실행될 조건문이 어떤 것으로 분기할 것인지 확실히 알기 전에 예측하는 CPU 기술입니다. (어려운 내용이니, 나중에 기회가 되면 살펴보겠습니다.)


참고자료 References

Table 1.
https://www.electronics-tutorials.ws/boolean/boolean-algebra-simplification.html

https://homubee.tistory.com/31
https://www.cs.fsu.edu/~lacher/courses/MAD3105/lectures/s4_1boolfn.pdf
https://en.m.wikipedia.org/wiki/Boolean_algebra#Duality_principle
https://en.m.wikipedia.org/wiki/Short-circuit_evaluation

profile
제가 좋아하는 것은 도가 아니라 기입니다

0개의 댓글