[CS] 진수(진법), 데이터 단위, 변수 타입 용어 정리
기존 프로젝트를 하면서 DB에 값을 넣으면 string, int, long 등의
타입으로만 입력하고 출력하다 보니 신경을 안썼는데
이번에 실무에서 컬럼들을 보니 타입이 바이너리에
값은 16진수로 들어가 있는걸 확인했다...
이를 보고 어떻게 값을 빼고 변환 할지에 대해서 감을 못잡았고
바이너리, 진수, 바이트 이러한 용어를 이해 못하고 있다고 생각이 들었다
그래서 기본을 다시 잡자는 생각으로 용어를 정리해 보았다
1. 진수(진법)
'수를 세는 단위', '수를 다루는 방법' 을 의미한다
우리는 실생활에 10진법을 사용한다
즉 0~9를 이용해서 수를 만드는 방법인 것이다
2. 데이터 단위
컴퓨터에서 데이터를 저장하는 단위가 있다
bit - byte - kilobyte(KB) - megabyte(MB) - gigabyte(GB) - terabyte(TB)
bit는 0과 1 두가지의 값만 저장하는 단위이고,
1 byte = 8bit 의 공간을 가지고,
1 KB = 1024byte 의 공간을 가진다
이후 MB,GB,TB 역시 계속 1024배씩 커지게 된다
컴퓨터에서는 2진법을 사용하고 위와 같은 단위를 사용하게 된다
사람이 2진수로 표현을 하기에는 복잡하고 길고
이해하기가 어렵기 때문에 2진수를 직접 사용하지는 않고
8진수나 16진수로 변환하여 사용하게 된다
우리는 10진수가 편하지만 컴퓨터는 2진수를 사용하기에
2진수를 알아야하고, 2진수가 너무 길기 때문에 이를 짧게 표현할 수 있는
8진수 (3자리), 16진수 (4자리) 를 많이 사용하는것이다
정리하자면
2진수는 컴퓨터가 사용하는 진수(진법) 이고,
bit는 컴퓨터가 사용하는 저장단위이다
바이너리는 쉽게 단어 의미대로 둘 이라는 의미이다
컴퓨터는 실제 저장은 2진수로 저장이 된다
이러한 2진수로 나열된 데이터를 바이너리 타입이라고 한다
그래서 파일을 열어보면 단순히 0과 1로 나열된 형태가 나온다
이와 상반된 용어로 텍스트 타입이 있다
파일을 열었을때 0과 1이 아닌 문자 형태로 보이도록 저장된 형태다
3. 변수 타입
int, char, String 등은 언어에서 사용되는 변수의 타입들 이다
10이라는 값이 있고 이를 변수에 담기위해 변수를 어떤 타입으로 사용할지 결정한다
이럴때 int 타입을 사용한다
자바에서는 4byte가 사용되지만 다른 언어에서는 설정되어 있는 크기가 다르다
타입은 언어마다 다르다고 이해하면 된다
4. 종합 정리
char ch = '가';
여기에 char 이라는 타입은 문자 하나를 저장하는 변수의 타입이다
char은 2byte를 가진다
실제로 메모리에 byte 크기만큼 공간이 생겼다는것을 의미한다
bit로 환산하면 16bit이다
bit, byte 모두 그냥 단위일뿐 16bit만큼의 공간이 생기는건 동일하다
'가' 라는 문자가 직접 저장되는것이 아니라
자바에서는 '가'에 해당하는 유니코드값이 저장된다
이코드값을 16진수로 하면 AC00 이다
실제로는 2진수로 저장이 된다
1010110000000000 이렇게 2진수로 저장된다
그리고 10진수로 하면 44032값을 가진다
즉 1010110000000000(2) 나 AC00(16) 이나 44032(10) 이나 다 동일하다
언어에서는 bit 단위보다는 byte 단위를 많이 사용하고
AC00은 2byte 이기 때문에
byte[] 배열로 다루게 되는것이다
AC 하나의 byte 이고, 00이 하나의 byte값 인것이다
추가로
저장된 값을 가져올때 2진수로 저장이 되어있는걸
bit 단위로 가져오지는 않고 최소 byte 단위로 가져오게 된다
저장할때 2byte를 저장했는데 가져올때 1byte만 가져온다면
원래 정보를 다 가져오지 못하고 원하는 값이 않나온다
이게 한글을 불러오는데 깨져서 불러와지는 이유중 하나이다