불리언 자료형
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
불리언 자료형은 참(true)과 거짓(false)의 두 가지 값을 나타내는 자료형으로, 프로그래밍 언어에서 논리 연산과 조건 판단에 사용된다. ALGOL 60이 불리언 자료형을 명시적으로 제공한 최초의 언어 중 하나이며, 이후 파스칼, 자바, C# 등 많은 언어에서 기본 자료형으로 채택되었다. C 언어는 C99 표준부터 `bool` 자료형을 지원하며, C++는 `bool`, `true`, `false` 키워드를 기본 데이터 형식으로 사용한다. 각 언어는 불리언 값을 처리하는 고유한 방식을 가지며, truthy와 falsy 개념을 통해 다른 자료형의 값도 불리언으로 평가할 수 있다. SQL에서는 WHERE 절 등에서 조건을 표현하기 위해 사용되며, 데이터베이스 시스템에 따라 불리언 자료형의 구현 방식에 차이가 있다.
더 읽어볼만한 페이지
- 원시 자료형 - 참조
참조는 프로그래밍에서 메모리 주소나 다른 데이터를 가리키는 값으로, 데이터의 효율적인 전달과 공유를 위해 사용되며, 포인터, 파일 핸들, URL 등이 그 예시이다. - 원시 자료형 - 문자열
문자열은 사람이 읽을 수 있는 텍스트를 저장하고 정보를 전달하거나 받는 데 사용되는 순서가 있는 문자들의 시퀀스로, 다양한 형태의 데이터를 표현하며 유한한 길이를 가지고, 프로그래밍 언어에서 기본 또는 복합 자료형으로 제공되고, 문자 집합과 인코딩 방식에 따라 표현 방식이 달라진다. - 불 대수 - 드 모르간의 법칙
드 모르간의 법칙은 명제 논리, 술어 논리, 집합론, 부울 대수 등에서 결합 또는 분리의 부정을 각 요소의 부정의 분리 또는 결합으로 표현하는 논리적 원리이다. - 불 대수 - 불 논리
불 논리는 0과 1, 참과 거짓의 두 값만으로 논리곱, 논리합, 부정 연산을 통해 명제의 참, 거짓을 판단하고 조작하는 논리 체계로, 라이프니츠의 개념 대수에서 기원하여 조지 불에 의해 체계화되었으며, 섀넌의 스위칭 회로 연구를 통해 디지털 논리 회로 설계의 기초를 다지는 데 기여하며 다양한 분야에서 핵심적인 역할을 수행한다. - 자료형 - 참조
참조는 프로그래밍에서 메모리 주소나 다른 데이터를 가리키는 값으로, 데이터의 효율적인 전달과 공유를 위해 사용되며, 포인터, 파일 핸들, URL 등이 그 예시이다. - 자료형 - 익명 함수
익명 함수는 이름이 없는 함수로, 람다 추상, 람다 함수, 람다 표현식, 화살표 함수 등으로 불리며, 함수형 프로그래밍 언어에서 람다식 형태로 많이 사용되고 고차 함수의 인수, 클로저, 커링 등에 활용되지만, 재귀 호출의 어려움이나 기능 제한과 같은 단점도 존재한다.
불리언 자료형 | |
---|---|
기본 정보 | |
![]() | |
분야 | 수학, 논리학, 컴퓨터 과학 |
값 | 참 (true), 거짓 (false) |
다른 이름 | 논리값, 부울값 |
사용 분야 | 논리 연산, 조건문, 디지털 회로 설계 |
정의 | |
설명 | 참 또는 거짓의 두 가지 값만을 가질 수 있는 자료형 |
논리 연산 | AND (논리곱) OR (논리합) NOT (논리 부정) |
컴퓨터 과학에서의 응용 | |
사용 | 조건문 (if, else) 반복문 (while, for) 논리 회로 설계 데이터베이스 쿼리 |
프로그래밍 언어 | C++ Java 파이썬 JavaScript C# |
역사 | |
창시자 | 조지 불 |
발전 | 클로드 섀넌에 의해 디지털 회로 설계에 응용 |
2. 역사적 배경
ALGOL 60(1960)은 'true'와 'false' 값을 가지며, ''(and), ''(or), ''(implies), ''(equivalence), ''(not) 기호로 논리 연산자를 나타내는 불리언 자료형을 명시적으로 제공하는 최초의 프로그래밍 언어 중 하나이다. 그러나 당시 많은 컴퓨터의 입력 장치와 문자 집합 제한으로 인해 대부분의 컴파일러는 `AND` 또는 `'AND'`와 같은 여러 연산자에 대한 대체 표현을 사용했다.
비교 연산자는 파스칼, C, 파이썬, 자바와 같이 부울 자료형이 내장된 프로그래밍 언어에서 일반적으로 부울 값을 반환하도록 정의된다.[1] 조건 및 반복 명령 또한 부울 값의 식을 테스트하도록 정의될 수 있다.[1]
프로그래밍 언어마다 불리언 자료형을 구현하는 방식은 다양하다.
원시 자료형 또는 사전 정의된 자료형으로 `BOOLEAN`을 사용하는 방식은 Simula 67 (1967), ALGOL 68 (1970),[3] 파스칼 (1970), 에이다 (1980), 자바 (1995), C# (2000) 등 많은 후기 프로그래밍 언어에서 채택되었다.
3. 불리언 자료형의 일반적인 특징
C90 및 Lisp와 같이 명시적인 부울 자료형이 없는 언어는 다른 자료형으로 진리 값을 나타낼 수 있다.[1] Common Lisp는 거짓을 위해 빈 리스트를 사용하고 참을 위해 다른 모든 값을 사용한다. C 프로그래밍 언어는 정수 자료형을 사용하며, `i > j`와 같은 관계식과 `&&` 및 `||`로 연결된 논리식은 참이면 1, 거짓이면 0의 값을 갖도록 정의된다. `if`, `while`, `for` 등의 테스트 부분은 0이 아닌 모든 값을 참으로 취급한다.[1][2]
컴퓨터에서 부울의 구현은 비트가 아닌 전체 워드로 표현될 가능성이 큰데, 이는 일반적으로 컴퓨터가 정보 블록을 전송하는 방식 때문이다.[1]
대부분의 프로그래밍 언어는 명시적인 부울 형식이 없더라도 논리곱(`AND`, `&`, `*`), 논리합(`OR`, `|`, `+`), 동치(`EQV`, `=`, `==`), 배타적 OR/비동치(`XOR`, `NEQV`, `^`, `!=`, `¬`) 및 부정(`NOT`, `~`, `!`, `¬`)과 같은 부울 대수 연산을 지원한다.[1]
루비, 스몰토크, 앨리스와 같은 일부 언어에서는 'true' 및 'false' 값이 별도의 클래스에 속한다. 예를 들어, 각각 `True` 및 `False`이므로 하나의 부울 '자료형'이 없다.[1]
SQL은 Null을 특수하게 처리하므로 명시적 비교를 위해 3치 논리를 사용하며, SQL:1999에 도입된 부울 자료형은 두 개 이상의 진리 값을 포함하도록 정의되어 SQL '부울'이 SQL에서 술어의 평가로 인한 모든 논리 값을 저장할 수 있다. 그러나 부울 형식의 열은 `TRUE` 및 `FALSE`로만 제한될 수 있다.[1]
4. 언어별 구현
int
)을 사용하거나, 열거형(enum) 또는 전처리기 매크로(#define
)를 사용하여 `FALSE`와 `TRUE` 상수를 정의했다.[1][2] C99 표준에서는 `_Bool` 자료형이 추가되었고, `4. 1. Ada
Ada에서 `Boolean`은 `Standard` 패키지에 있으며, `False`와 `True`라는 값을 가지는 열거형으로 정의되어 있다. 여기서 `False` < `True`이다.[3]
```ada
type Boolean is (False, True);
p : Boolean := True;
...
if p then
...
end if;
```
비교 연산자 (`,`, `/=`, `<`, `<=`, `>`, `>=`)는 `Boolean`을 포함한 모든 열거형에 적용 가능하다. 불리언 연산자 `and`, `or`, `xor`, `not`이 `Boolean`에 대해 정의되어 있으며, 그 파생형에도 적용 가능하다. 불리언 연산자는 `Boolean`의 배열에도 적용 가능하다.[3]
4. 2. ALGOL
ALGOL 60(1960)은 ''true''와 ''false'' 값을 가지며 '' (and), '' (or), '' (implies), '' (equivalence), '' (not) 기호로 논리 연산자를 나타내는 불리언 자료형을 명시적으로 제공하는 최초의 프로그래밍 언어 중 하나이다.[3] 그러나 당시 많은 컴퓨터의 입력 장치와 문자 집합 제한으로 인해 대부분의 컴파일러는 AND
또는 'AND'
와 같은 여러 연산자에 대한 대체 표현을 사용했다. ALGOL 68에서는 자료형의 명칭이 `bool`로 축약되었다.[3]
4. 3. C 언어
C99 표준 이전에는 C 언어에서 불리언 자료형을 명시적으로 지원하지 않았다. 따라서 개발자들은 주로 정수형(int
)을 사용하여 참(True) 또는 거짓(False) 값을 표현했다.[1][2] 일반적으로 0은 거짓을, 0이 아닌 다른 모든 값은 참을 의미했다.[1][2]
```c
typedef enum _boolean { FALSE, TRUE } boolean;
...
boolean b;
```
```c
#define FALSE 0
#define TRUE 1
...
int f = FALSE;
```
위와 같이 열거형(enum)을 사용하거나, 전처리기 매크로(#define
)를 사용하여 `FALSE`와 `TRUE` 상수를 정의하는 방식이 널리 사용되었다. 그러나 열거형은 정수형과 동일하게 취급되므로, 불리언 값과 정수 값 사이의 실질적인 차이는 없었다.
C99 표준에서는 `_Bool`이라는 불리언 자료형이 추가되었다. `
```c
#include
bool b = false;
...
b = true;
```
C99 이후에도 불리언 값은 여전히 정수처럼 작동하며, 정수형 변수에 저장하거나 정수 연산에 사용할 수 있다.
C 언어 문화권에서는 0이 거짓, 0이 아닌 값이 참이라는 규칙이 항상 적용되는 것은 아니다. 예를 들어, Unix 계열 시스템의 종료 상태는 0이 정상(참), 0이 아닌 값이 오류(거짓)를 나타낸다. COM의 `HRESULT` 형은 0을 성공( `S_OK` ), 양수를 준성공( `S_FALSE` ), 음수를 실패( `E_FAIL` 등)로 간주한다.[28] C11에서 표준화된 `errno_t` 형은 0을 정상(에러 없음)으로 간주한다.[29]
4. 4. C++
C++에서는 표준화 과정에서 `bool`, `true`, `false`라는 키워드가 도입되어 기본 데이터 형식으로 지원되었다. 크기는 처리 시스템에 따라 정의된다.[1]
부울형을 출력하는 코드는 다음과 같다.
```cpp
int i = 5;
bool myBool = (i == 5);
std::cout << "i == 5 is " << std::boolalpha << myBool << std::endl;
```
`std::boolalpha`는 bool형 값의 출력을 `true` 또는 `false`로 변경하는 조작자이다. 생략하면 1 또는 0이 출력된다.[1]
ISO C++ 1998의 표준 C++ 라이브러리에서는 `vector
4. 5. C#
C#에서 부울 자료형은 `bool`이다. 이는 .NET의 `System.Boolean`형의 별칭이지만, `Marshal.SizeOf()`와 `sizeof` 연산자의 결과는 각각 다르다.[30]
```csharp
Console.WriteLine(typeof(bool)); // System.Boolean
Console.WriteLine(System.Runtime.InteropServices.Marshal.SizeOf(typeof(bool))); // 4
Console.WriteLine(sizeof(bool)); // 1
bool b = true;
Console.WriteLine(Convert.ToInt32(b)); // 1
```
부울 자료형을 출력하는 코드는 다음과 같다.
```csharp
int i = 5;
bool myBool = (i == 5);
System.Console.WriteLine("i == 5 is " + myBool);
```
이 출력 결과는 다음과 같다.
```
i == 5 is True
4. 6. Dart
Dart에서는 `dart:core` 라이브러리에 `bool` 클래스가 있으며, `true`와 `false`가 그 진리값(그리고 그 리터럴)이다. 다른 많은 언어와 달리 `true` 이외에는 모두 거짓으로 취급된다. 또한, checked mode에서는 `if`문 등 진리값이 필요한 곳에서 타입 검사가 이루어지므로, 다른 타입의 값일 경우에는 타입 검사에서 에러가 발생한다.[1]
4. 7. ECMAScript (JavaScript)
JavaScript에는 불리언 자료형이 있으며, 참/거짓 값(과 그 리터럴)은 `true`와 `false`이다. 비교 연산 등의 결과는 불리언 값이 되지만, 논리 연산자 `&&`나 `||`는 인수를 처리하여 단락 평가하고, 결과는 어느 쪽 인수의 값이 된다.[31][32] JavaScript에서는 논리 연산자나 if 문 등 참/거짓을 필요로 하는 경우, 참으로 취급되는 것(참이 되는 값)을 truthy(참 같은), 거짓으로 취급되는 것(거짓이 되는 값)을 falsy(거짓 같은)라고 한다. 대표값 `false` 외에 Undefined형의 값, Null형의 값, 숫자 0과 −0과 NaN, 빈 문자열( "" ), 0n(BigInt의 0)이 falsy 값이며, 대표값 `true` 외에 falsy인 값을 제외한 모든 값이 truthy이다.
한편 표준 사양인 ECMAScript의 규격표에서는 그러한 용어를 사용하지 않고, 참/거짓 값을 평가하는 곳에서는 `ToBoolean`이라는 연산을 사용하여 `true`나 `false`를 얻는다는 식으로 기술되어 있다.
4. 8. FORTRAN
FORTRAN의 첫 번째 버전(1957)과 FORTRAN II(1958)에는 논리 값이나 연산이 없었지만, FORTRAN IV(1962)에서는 부울 자료형(`LOGICAL`), 참 리터럴(`.TRUE.` 및 `.FALSE.`), 논리 연산자(`.NOT.`, `.AND.`, `.OR.`) 등이 ALGOL 60의 영향을 받아 도입되었다.[3] `FORMAT` 문에서는 논리 값 처리를 위한 형식 설명자(`L`)가 제공되었다.
4. 9. Haskell
Haskell에서는 `Bool` 자료형이
4. 10. Java
자바에서 부울은 원시 자료형으로 `boolean`이다.[7] `boolean` 자료형의 값은 `true` 또는 `false` 중 하나만 될 수 있다.[7] 정수형에서 `boolean`으로, 또는 `boolean`에서 정수형으로의 묵시적 형변환은 없다.
다음과 같은 코드는 컴파일 시 오류가 발생한다.
```java
int i = 5;
if (i = 5) System.out.println("i is five"); // i == 5 의 오류.
if (i) System.out.println("i is not zero");
```
위의 예에서 식 `i = 5`나 `i`의 결과는 `int`로 평가되지만, 자바의 if문의 조건식은 C/C++와 달리 `boolean`만 받기 때문에 컴파일 오류가 발생한다.
부울형을 출력하는 코드는 다음과 같다.
```java
boolean myBool = (i == 5);
System.out.println("i == 5 is " + myBool);
```
이 출력 결과는 다음과 같다.
```text
i == 5 is true
```
`boolean`의 래퍼 클래스는 `Boolean`이다.
4. 11. JavaScript
JavaScript에는 불리언 자료형이 있으며, 참/거짓 값(과 그 리터럴)은 `true`와 `false`이다. 비교 연산 등의 결과는 불리언 값이 되지만, 논리 연산자 `&&`나 `||`는 인수를 다음과 같이 처리하여 단락 평가하고, 결과는 어느 쪽 인수의 값이 된다.[31][32] JavaScript에서는 논리 연산자나 if 문 등 참/거짓을 필요로 하는 경우, 참으로 취급되는 값(참이 되는 값)을 truthy(참 같은), 거짓으로 취급되는 값(거짓이 되는 값)을 falsy(거짓 같은)라고 한다. `false` 외에 Undefined형의 값, Null형의 값, 숫자 0과 −0과 NaN, 빈 문자열( "" ), 0n(BigInt의 0)이 falsy이며, `true` 외에 앞에서 언급한 falsy인 값 이외의 모든 값이 truthy이다.
한편 표준 사양인 ECMAScript의 규격표에서는 그러한 용어를 사용하지 않고, 참/거짓 값을 평가하는 곳에서는 §7.1.2 (ECMA-262 7th Edition의 경우)에서 나타내고 있는 `ToBoolean`이라는 연산을 사용하여 `true`나 `false`를 얻는다고 기술되어 있다.
4. 12. Scheme
Scheme에서 참과 거짓은 `#t`와 `#f`로 표현되며, if 문 등에서는 `#f`를 제외한 모든 값(특히, 빈 리스트 `'()`도)이 참으로 취급된다.
4. 13. ML
ML에는 `bool` 자료형이 있으며, 값으로 `true`와 `false`를 가진다. 다음은 그 예이다.[1]
```sml
> val isittrue = fn : bool -> string
> val it = "YES" : string
> val it = "NO" : string
> val it = "YES" : string
> val it = "NO" : string
4. 13. 1. OCaml
ocaml
# 1 = 1 ;;
```
이 코드는 OCaml에서 `bool` 자료형이 사용되는 예시이다. `1 = 1`은 참이므로, 결과는 `true`가 된다.
4. 14. Pascal
파스칼에서는 `Boolean`이 기본 데이터 형식으로 제공된다.[3] 다음은 그 예시이다.
```pascal
var
value: Boolean;
...
value := True;
value := False;
if value then
begin
...
end;
```
파스칼을 기반으로 한 델파이 언어(Object Pascal)에는 `Boolean` 형 외에도 `ByteBool` 형(1바이트 논리형), `WordBool` 형(2바이트 논리형), `LongBool` 형(4바이트 논리형)이 존재한다.[3]
4. 15. Perl
펄은 불리언 자료형이 따로 없지만, 숫자나 문자열에 구별이 없는 스칼라 자료형을 이용하여 불리언 연산을 수행한다. 다음 값들은 거짓으로 해석된다.[8]
이 외의 모든 값은 참으로 해석된다. 예를 들어, `0.0`이나 `0E0`과 같은 문자열은 "0"이지만 참으로 간주된다.[33]
집합형의 요소는 존재하는지 여부를 평가받을 수 있으며,[33] 모든 변수는 정의되어 있는지 여부를 평가받을 수 있다.[34] 해시나 배열의 요소에서 값이 `undef`인 것은 존재하지만 미정의 상태이다. 스칼라를 부울처럼 다룰 때 존재와 정의의 구별이 중요하다.
Perl 5에는 진리값을 나타내는 내장 상수가 없지만, Raku (Perl 6)에는 존재한다.
4. 16. PHP
PHP의 `bool`형은 파이썬과 거의 유사하며, `TRUE`와 `FALSE` 값을 가진다. 0이나 NULL과 같은 값은 대체로 FALSE로 간주된다.[1]
FALSE로 간주되는 값들은 다음과 같다:
PHP에서는 비교 방법에 따라 엄격한 비교와 느슨한 비교를 할 수 있다.
```php
$a = 0;
print ( $a == false ); // true로 평가된다.
print ( $a === false ); // false로 평가된다.
print ( "0" == 0 ); // true로 평가된다.
print ( 0 == "" ); // true로 평가된다.
print ( "0" == "" ); // false로 평가된다. 느슨한 비교에서는 추이율이 성립하지 않는 경우가 있다.
```
`==` 연산자는 느슨한 비교를 수행하여, 값의 타입이 달라도 값이 같으면 `true`로 평가한다. 반면, `===` 연산자는 엄격한 비교를 수행하여, 값과 타입이 모두 같아야 `true`로 평가한다. 위의 예시에서 `$a`는 숫자 0이므로, `false`와 느슨한 비교를 하면 `true`로 평가되지만, 엄격한 비교를 하면 `false`로 평가된다.
4. 17. Python
파이썬은 버전 2.3부터 `bool` 타입을 가지고 있으며, 이는 표준 정수형인 `int`의 서브클래스이다.[10] 이 타입은 `True`와 `False` 두 가지 값을 가지며, 이는 각각 1과 0의 ''특별한 버전''으로 산술적인 맥락에서 그렇게 동작한다.
다음은 파이썬에서 거짓으로 취급되는 값들이다.
위에 언급되지 않은 나머지 값들은 참으로 취급된다.
`False`와 `True` 상수는 파이썬 2.2.1에서 빌트인으로 추가되었고, `bool` 형은 파이썬 2.3에서 추가되었다.
비교 연산 등은 `True` 또는 `False`를 반환한다. "or" 나 "and"는 단락 평가에 의해 피연산자 중 하나를 반환한다.
4. 18. Ruby
루비에서는 `nil`(루비의 널 값)과 특수한 `false` 객체만이 '거짓'으로 간주된다. 그 외의 모든 것(정수 0과 빈 배열 포함)은 '참'이다.[1]
```ruby
a = 0
if (a)
print "true"
else
print "false"
end
```
위 코드는 "true"를 표시한다.
이는 빈 문자열이나 숫자 0이 거짓으로 취급되는 다른 프로그래밍 언어와는 다른 점이므로 주의해야 한다.
루비에는 불리언 자료형에 상당하는 클래스는 없으며, `false`는 `FalseClass` 클래스의 인스턴스이고, `true`는 `TrueClass` 클래스의 인스턴스이다. `nil` 또한 객체이며, `NilClass` 클래스의 인스턴스이다.
```ruby
p false.class
p true.class
p nil.class
```
위 코드는 각각 "FalseClass", "TrueClass", "NilClass"를 출력한다.
4. 19. Smalltalk
스몰토크에서는 `true`는 `True` 클래스의 객체[36], `false`는 `False` 클래스의 객체[37]이며, `True` 클래스와 `False` 클래스는 각각 `Boolean` 클래스를 상속한 클래스이다. 스몰토크에는 언어 기능으로서 if문에 해당하는 구문이 없고 `True` 클래스와 `False` 클래스의 차이에 따라 분기를 실현한다.
```smalltalk
value := true ifTrue: [ 1 ] ifFalse: [ 0 ].
```
위는 if문에 해당하는 분기의 예시로 `true`에 분기용 메시지를 보내고 있기 때문에 전자의 블록을 평가하여 value에 1을 대입한다.
메시지 송신 측만으로는 다른 언어에서의 if문의 구문 설탕으로만 보이지만, 작성 방식은 스몰토크에서의 일반적인 메시지 식에 지나지 않으며, 클래스에도 다음과 같이 메시지에 대응하는 메서드가 존재한다.
```smalltalk
True methodsFor: 'basic'
!
ifTrue: aTrueBlock
ifFalse: aFalseBlock
^ aTrueBlock value.
!!
```
스몰토크에서의 불리언 값은 이러한 구조로 되어 있기 때문에, 원칙적으로 다른 언어처럼 숫자와의 상호 변환이 존재하지 않는다. 다만, `#ifTrue:ifFalse:`를 구현한 객체와의 호환성을 가진다. 그러나 처리 시스템에 따라 성능 유지를 위해 `#ifTrue:ifFalse:`의 인수에 블록을 지정한 경우 true 또는 false가 아니면 예외를 발생시키는 등 호환성이 약간 제한되는 경우도 있다.
또한, 스몰토크에서는 `nil`도 마찬가지로 분기로서 동작할 수 있으며, `nil`과 조합하여 3값 논리로 사용할 수도 있다.
```smalltalk
nil ifNotNil: [ :value | value ifTrue: [] ifFalse: [] ].
4. 20. SQL
SQL에서는 조건이 필요한 곳에 불리언이 나타나며, WHERE 절과 같이 술어 형태로 사용된다. 술어는 비교 연산자나 `IN`, `IS (NOT) NULL` 연산자를 사용하여 생성된다. `TRUE`와 `FALSE` 외에도, NULL과의 비교 시에는 `UNKNOWN`이라는 세 번째 상태가 나타날 수 있다.
SQL92 표준은 술어를 평가하는 `IS (NOT) TRUE`, `IS (NOT) FALSE`, `IS (NOT) UNKNOWN` 연산자를 도입했다. 이후 SQL:1999 표준에서는 선택적 기능(T031)으로 `BOOLEAN` 데이터 유형을 도입했다. `1=NOT NULL` 제약 조건을 사용하면 SQL `BOOLEAN`은 `TRUE` 및 `FALSE` 값만 저장할 수 있지만, 널 허용 시에는 널 값도 가질 수 있다. SQL 표준은 `BOOLEAN` 유형에 대해 `TRUE`, `FALSE`, `UNKNOWN` 세 가지 리터럴을 정의한다.
`NULL BOOLEAN`과 `UNKNOWN`은 "완전히 동일한 것을 의미하기 위해 상호 교환하여 사용될 수 있다"고 명시되어 있다.[12][13] 그러나 이는 `UNKNOWN`을 NULL에 대한 동일성 비교 규칙의 대상이 되게 하여 논란을 일으켰다. 예를 들어, `UNKNOWN = UNKNOWN`은 `TRUE`가 아니라 `UNKNOWN/NULL`이다.[14]
2012년 기준으로 주요 SQL 시스템 중 T031 기능을 구현하는 곳은 거의 없었다.[15] PostgreSQL과 Firebird가 주목할 만한 예외였지만, PostgreSQL은 `UNKNOWN` 리터럴을 구현하지 않았다.[16]
SQL 시스템에 따라 불리언 값 처리는 다르다.4. 20. 1. MySQL
MySQL에서 `BOOLEAN`은 `TINYINT(1)`의 별칭으로 처리된다.[22] `TRUE`는 정수 1과 같고, `FALSE`는 정수 0과 같다.[23] 조건문에서 0이 아닌 모든 정수는 true로 간주된다.
4. 21. Visual Basic
Visual Basic에는 `Boolean` 형이 있으며, 비교 연산의 결과는 이 형이 된다. 16비트(2바이트) 정수로 저장되지만, 값은 `True`(-1)와 `False`(0)뿐이다. 다음은 예시이다.
```vb
Dim isSmall As Boolean
isSmall = intMyNumber < 10 ' 식을 평가한 결과는 True 또는 False가 된다
If isSmall Then
MsgBox("The number is small")
End If
Dim hellFreezesOver As Boolean ' Boolean 변수는 False로 초기화된다
hellFreezesOver = False ' 또는 대입문을 사용할 수도 있다
Do Until hellFreezesOver
Call CheckAndProcessUserInput()
Loop
```
또한, OLE/COM, 특히 OLE 자동화에서 사용되는 논리형 `VARIANT_BOOL`도 Visual Basic의 `Boolean` 형과 동일하다. `VARIANT_TRUE` 및 `VARIANT_FALSE`는 <wtypes.h>에서 다음과 같이 정의되어 있다.
```c
typedef short VARIANT_BOOL;
#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
4. 22. VB.NET
Visual Basic .NET(VB.NET)의 `Boolean`형은 `System.Boolean`의 별칭이지만, 내장 함수[38]나 호환 메서드[39]를 사용할 경우에는 원래의 VB와 유사한 동작을 한다[40].
```vbnet
Console.WriteLine(GetType(Boolean)) ' System.Boolean
Console.WriteLine(System.Runtime.InteropServices.Marshal.SizeOf(GetType(Boolean))) ' 4
Dim b As Boolean = True
Console.WriteLine(Len(b)) ' 2
Console.WriteLine(CType(b, Integer)) ' -1
Console.WriteLine(Convert.ToInt32(b)) ' 1
5. Truthy
파스칼, C, 파이썬, 자바와 같이 부울 자료형이 내장된 프로그래밍 언어에서는 `>` 및 `≠`와 같은 비교 연산자가 일반적으로 부울 값을 반환하도록 정의된다. 조건 및 반복 명령은 부울 값의 식을 테스트하도록 정의될 수 있다.
C90 및 Lisp와 같이 명시적인 부울 자료형이 없는 언어는 다른 자료형으로 진리 값을 나타낼 수 있다. Common Lisp는 거짓을 위해 빈 리스트를 사용하고 참을 위해 다른 모든 값을 사용한다. C 프로그래밍 언어는 정수 자료형을 사용하며, 여기서 `i > j`와 같은 관계식과 `&&` 및 `||`로 연결된 논리식은 참이면 1, 거짓이면 0의 값을 갖도록 정의되는 반면, `if`, `while`, `for` 등의 테스트 부분은 0이 아닌 모든 값을 참으로 취급한다.[1][2] 실제로 부울 변수는 한 개의 이진 숫자(비트)를 가진 숫자 변수 또는 두 개의 값만 저장할 수 있는 길이가 1인 비트 문자열로 간주(및 구현)될 수 있다. 컴퓨터에서 부울의 구현은 비트가 아닌 전체 워드로 표현될 가능성이 크다. 이는 일반적으로 컴퓨터가 정보 블록을 전송하는 방식 때문이다.
대부분의 프로그래밍 언어는 명시적인 부울 형식이 없더라도 논리곱(`AND`, `&`, `*`), 논리합(`OR`, `|`, `+`), 동치(`EQV`, `=`, `==`), 배타적 OR/비동치(`XOR`, `NEQV`, `^`, `!=`, `¬`) 및 부정(`NOT`, `~`, `!`, `¬`)과 같은 부울 대수 연산을 지원한다.
루비, 스몰토크, 앨리스와 같은 일부 언어에서는 ''true'' 및 ''false'' 값이 별도의 클래스에 속한다. 예를 들어, 각각 `True` 및 `False`이므로 하나의 부울 ''자료형''이 없다.
SQL은 Null을 특수하게 처리하므로 명시적 비교를 위해 3치 논리를 사용하며, SQL:1999에 도입된 부울 자료형은 두 개 이상의 진리 값을 포함하도록 정의되어 SQL ''부울''이 SQL에서 술어의 평가로 인한 모든 논리 값을 저장할 수 있다. 그러나 부울 형식의 열은 `TRUE` 및 `FALSE`로만 제한될 수 있다.
참조
[1]
서적
The C Programming Language
https://archive.org/[...]
Prentice Hall
[2]
서적
ANSI and ISO Standard C Programmer's reference
https://archive.org/[...]
Microsoft Press
[3]
웹사이트
Report on the Algorithmic Language ALGOL 68, Section 10.2.2.
http://www.fh-jena.d[...]
1968-08
[4]
간행물
DECSystem10 FORTRAN IV Programmers Reference Manual
http://www.bitsavers[...]
Digital Equipment Corporation
2011-11-16
[5]
웹사이트
CLHS: Type BOOLEAN
http://www.lispworks[...]
[6]
웹사이트
Guides and Sample Code
https://developer.ap[...]
2018-05-01
[7]
웹사이트
Java Booleans
https://www.w3school[...]
2021-02-17
[8]
웹사이트
perlsyn - Perl Syntax / Truth and Falsehood
http://perldoc.perl.[...]
2013-09-10
[9]
웹사이트
PEP 285 -- Adding a bool type
https://wiki.tcl.tk/[...]
2011-05-04
[10]
웹사이트
PEP 285 -- Adding a bool type
https://www.python.o[...]
2002-04-03
[11]
웹사이트
Expressions
https://docs.python.[...]
2013-05-15
[12]
서적
SQL and Relational Theory: How to Write Accurate SQL Code
https://books.google[...]
O'Reilly Media, Inc.
[13]
문서
ISO/IEC 9075-2:2011 §4.5
[14]
서적
Introduction to Databases With Web Applications
https://books.google[...]
Pearson Education Canada
[15]
웹사이트
Survey of BOOLEAN data type implementation
http://troels.arvin.[...]
[16]
웹사이트
PostgreSQL: Documentation: 10: 8.6. Boolean Type
http://www.postgresq[...]
2018-05-01
[17]
웹사이트
Migrate an Access database to SQL Server
https://support.micr[...]
2020-10-19
[18]
웹사이트
SQL data types (Access desktop database reference)
https://docs.microso[...]
2020-10-19
[19]
웹사이트
Introduction to data types and field properties
https://support.micr[...]
2020-10-19
[20]
웹사이트
Boolean Data - MS-Access Tutorial
https://sourcedaddy.[...]
2020-10-19
[21]
웹사이트
Boolean Type
https://www.postgres[...]
2016-10-27
[22]
웹사이트
MySQL :: MySQL 8.0 Reference Manual :: 12.1.1 Numeric Type Overview
https://dev.mysql.co[...]
[23]
웹사이트
MySQL :: MySQL 8.0 Reference Manual :: 9.1.6 Boolean Literals
https://dev.mysql.co[...]
[24]
웹사이트
Data Types
https://help.tableau[...]
2020-10-19
[25]
웹사이트
Formatting Calculations in Tableau
https://help.tableau[...]
2020-10-19
[26]
웹사이트
Boolean makes Tableau faster - true or false?
https://tarsolutions[...]
2020-09-11
[27]
웹사이트
4. Decisions, Decisions...
https://www.forth.co[...]
2022-02-11
[28]
웹사이트
Error Handling in COM
https://docs.microso[...]
Microsoft Docs
[29]
웹사이트
エラー処理 - cppreference.com
https://ja.cpprefere[...]
[30]
웹사이트
sizeof (C# リファレンス)
https://docs.microso[...]
Microsoft Docs
[31]
웹사이트
Truthy
https://developer.mo[...]
[32]
웹사이트
Falsy
https://developer.mo[...]
[33]
웹사이트
exists - perldoc.perl.org
http://perldoc.perl.[...]
[34]
웹사이트
defined - perldoc.perl.org
http://perldoc.perl.[...]
[35]
웹사이트
Special method names: Basic customization
http://docs.python.o[...]
2008-02-03
[36]
웹사이트
GNU Smalltalk Library Reference: True
https://www.gnu.org/[...]
2018-06-28
[37]
웹사이트
GNU Smalltalk Library Reference: False
https://www.gnu.org/[...]
2018-06-28
[38]
웹사이트
CType Function - Visual Basic | Microsoft Docs
https://docs.microso[...]
[39]
웹사이트
Strings.Len Method (Microsoft.VisualBasic) | Microsoft Docs
https://docs.microso[...]
[40]
웹사이트
Boolean Data Type (Visual Basic) | Microsoft Docs
https://docs.microso[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com