Study/Java

Java의 boolean의 크기는 몇일까?

pmh 2021. 5. 9. 21:03

Java의 boolean의 크기는 몇일까?

서론

Java 스터디 중 자료형에 대해 학습하던 중 자료형의 크기를 알아보는 도중이었습니다. 원시 타입 중에 boolean 은 참과 거짓만 판별하면 된다고 하는데 검색하여 찾아보니 1bit의 크기를 가진다고 하는 글도 있고, 1byte의 크기를 가진다고 하는 글도 있다. 도대체 이유가 뭘까?

 

The Java™ Tutorials에 따르면

boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.
공식 문서 링크

 

boolean 데이터 타입은 참(true)과 거짓(false) 두 가지 값만 사용할 수 있습니다. 참과 거짓 조건을 추적하는 단순 플래그 에서 이 데이터 타입을 사용하십시오. 이 데이터 유형은 한 비트의 정보를 나타내지만 "크기"는 정확하게 정의되지 않습니다.
라고 쓰여 있다. java에서 boolean 변수의 크기는 정확하게 정의되지 않았다는 것이다. 그렇다면 그 이유는 무엇일까.

 

boolean의 크기가 정확하게 정의되지 않은 이유

The Java Virtual Machine Specification, Java SE 16 Edition 에 다음과 같이 설명되어있다.

Although the Java Virtual Machine defines a boolean type, it only provides very limited support for it. There are no Java Virtual Machine instructions solely dedicated to operations on boolean values. Instead, expressions in the Java programming language that operate on boolean values are compiled to use values of the Java Virtual Machine int data type.

 

JVM은 부울 타입을 정의하지만, 매우 제한된 지원만 제공합니다. 부울 값에 대한 작업 전용 Java Virtual Machine 명령어는 없습니다. 대신 부울 값으로 작동하는 Java 프로그래밍 언어의 식은 JVM int 데이터 유형의 값을 사용하도록 컴파일됩니다.
라고 한다...

 

억지로 boolean을 1bit로 사용하기

그렇다면 억지로 1bit를 쓰거나 할 수는 없을까?
java.util.BitSet을 사용한다면 가능은 하겠지만, 성능적인 측면에서 보자면 boolean[] vs. BitSet: Which is more efficient? - Stack Overflow에 따르면 다음과 같다.

BitSet은 매우 작은 크기를 제외하고는 boolean[]보다 메모리 효율성이 높습니다. 배열의 각 boolean은 1 바이트를 차지합니다. runtime.freeMemory()의 숫자는 BitSet에 대해 약간 혼란 스럽지만 적습니다.
boolean []은 매우 큰 크기를 제외하면 CPU 효율성이 더 높습니다. 예를 들어, 백만개의 boolean 배열은 약 4 배 더 빠르며 (예 : 6ms 대 27ms), 천만, 1억의 경우에는 거의 비슷합니다.

 

 

파파고와 구글 번역기를 같이 사용해가면서 자연스럽게 번역을 해보았습니다만, 틀리거나 어색한 부분이 있을 수도 있습니다. 틀린 부분에 대해서는 지적해주시면 감사하겠습니다.