500GB짜리 새 SSD를 사서 컴퓨터에 설치했다. 두근거리는 마음으로 용량을 확인해봤더니 이게 뭐야? 500GB보다 꽤나 부족한 용량이다. 이 때문에 당황한 기억이 있는 사람들이 있을 것이다.
분명히 500,000,000,000바이트가 넘는 디스크를 달았는데도 불구하고 왜 실제 용량은 465GB인 걸까?
이를 알기 위해서는 컴퓨터 자료구조에 대해 반드시 알아야... 하는 것은 아니지만 자료구조의 개념과 컴퓨터가 자료를 표현하는 방법 및 그 단위에 대해 간략하게 알게 된다면 당황하지 않을 수 있다.
자료(Data)
자료, 혹은 데이터라고 하면 더 익숙할 이것은, 관찰 또는 측정을 통해 수집된 숫자 또는 문자 등으로 나타낼 수 있는 값을 의미한다. 이는 자료들이 반드시 어떤 정보를 담고 있어야 한다는 것은 아니며, 분류되지 않고 뜻을 알 수 없는 어떤 측정값들 모두가 자료가 될 수 있다. 이를 추출, 분석, 가공하여 의미 있는 데이터로 분류되면 그것은 정보(Information)가 된다.
예를 들어 날씨 데이터를 수집한다고 하자. 그전에 날씨란 무엇인가? 날씨라는 것은 복잡한 데이터가 모여 만들어내는 정보이다. 그렇다면 우리는 무엇을 가지고 날씨를 평가할 수 있는가? 그에 대해 정하는 것부터가 자료구조의 시작이다. 도대체 무엇을 어떤 형태로 저장하고 어떻게 나타내며 계산까지 할 것인가, 무엇보다도 그것을 컴퓨터로 어떻게 하느냐에 대한 것이 바로 자료구조이다.
날씨에 대한 판단, 즉 날씨 정보를 알기 위해서는 온도와 습도, 미세먼지 농도 등의 데이터가 필요하다. 또한 기온은 섭씨, 습도는 백분율, 미세먼지 농도는 ㎍/m³으로 자료형을 정할 수 있다.
다음으로, 오늘의 날씨가 지난 평균에 비해 추운지 더운지 등을 파악하기 위해서 자료는 어떠한 형태로 저장되어 있는 것이 좋은 것인가? 어떻게 데이터를 검색하고 정렬할 수 있는가? 그리고 어떤 자료들이 서로 연관되어 묶여있는 것이 좋은 것인가? 이러한 것들이 모두 자료구조에 관한 이야기이다.
자료구조(Data Structure)
자료구조는 Data Structure이다. 문자 그대로 자료구조이고, 그 뜻을 풀어 보면 컴퓨터에서 자료를 효율적으로 관리하고 구조화하기 위한 방법 또는 학문을 의미한다. 자료구조는 컴퓨터가 자료를 표현하는 방법과 자료를 처리하기 위한 방법 등을 담고 있다. 많은 프로그램들이 작동하기 위해서는 그 나름의 논리인 알고리즘이 필요한데, 이 알고리즘을 효율적으로 작동하게 하기 위해 필요한 것이 자료구조이다.
자료의 표현 단위
그렇다면 컴퓨터는 자료를 어떻게 저장하고 또 표현하는 것일까? 현재 컴퓨터의 가장 기본적인 데이터 표현 방식은 2진법이다. 일상생활에서 쓰는 10진법은 0에서 9까지 10개의 숫자로 한 자릿수를 표현하는 것이라고 하면, 2진법은 0과 1이라는 두 숫자로 하나의 자릿수를 표현한다. 그렇다면 컴퓨터는 왜 2진법을 사용하는 걸까? 그것은 아날로그 자료를 디지털로 확실하게 표현하기 가장 좋은 방법 중 하나이기 때문이라고 할 수 있다.
비트(Bit) - Binary Digit, 1또는 0(True or False)의 2진법으로 표현되는 컴퓨터 데이터 표현의 최소 단위
예를 들어 무지개는 나라마다 색의 개수가 다르고 실제로는 무수히 다른 색깔들이 이어진 것이지만, 우리나라에서는 그것을 7가지 색으로 나타낸다. 이때 사람들에게 무지개 사진을 주고 선을 그어 색깔 7개를 구분하라고 하면 얼추 비슷하긴 해도 다들 제각각의 다른 선들이 그어질 것이다. 심지어 10 개로 나누라고 하면 더 엉망이 될 것이다. 하지만 색을 크게 두 개로 나누라고 하면 어떻게 될까? 어찌 되었든 무지개의 중간쯤에 선이 위치할 것이다.
그렇다면 무지개의 가장 아래를 0, 무지개의 가장 위를 100이라고 하고 수많은 사람들이 무지개를 둘로 나눈 선의 위치가 아무리 낮아도 25, 아무리 높아도 75사이에 있다면 우리는 25보다 작은 것은 반드시 무지개의 바닥 색깔, 75보다 큰 것은 반드시 무지개의 하늘 색깔이라고 넉넉하게 이야기하면 정말 웬만해선 모두가 인정할 수 있는 구분이 되지 않을까?
컴퓨터가 2진법을 가장 기초적인 데이터의 표현 단위로 삼은 중요한 이유중 하나가 바로 이와 비슷하다. 컴퓨터의 데이터의 입출력은 전기적 신호로 이루어지는데, 안타깝게도 이 전기 신호는 명확하고 정확하며 일정한 것이 아니다. 언제든지 흔들리며 강약을 오가는데, 이런 오류 투성이 신호를 여러 개로 쪼개 구분하려 한다면 컴퓨터마다, 그리고 특정 시기나 장소 등에 따라 계산 결과가 천차만별로 다르게 나오는 어처구니없는 일이 벌어질 수도 있다. 이를 감안해 0에서 1 사이 강도의 전기 신호를 반으로 쪼개 0에 가까운 신호는 0으로, 1에 가까운 신호는 1로 구분하면 정말 웬만해서는 오류가 날 일이 없을 것이다. 이것이 컴퓨터가 2진법을 기본으로 삼는 이유이다.
2진법인 비트를 기본으로 하여 컴퓨터는 다음과 같은 여러 자료 표현 단위들을 갖고 있다.
비트(Bit)
- Binary Digit, 1 또는 0(True or False)으로 표현되는 데이터 표현의 최소 단위
니블(Nibble)
- 4bit(Quad Bit)
- 16진수의 한 단위
- 10진수 한 자리 표현이 가능한 최소 단위
바이트(Byte)
- 8bit
- ASCII 코드를 이용하는 C언어 등에서 한 문자 표현을 위한 최소 단위(1Char = 1Byte)
워드(Word)
- 컴퓨터 시스템에서 한번에 처리하는 데이터 단위
- 32Bit 시스템의 경우 1 Word는 곧 32bit(4Byte)
필드(Field) - 항목
- 파일 구성의 최소 단위
- 의미 있는 정보를 표현하기 위한 최소 단위(학생 구조체의 이름 항목)
레코드(Record)
- 자료 처리의 단위
- 여러 연관된 필드가 모여 하나의 레코드 구성(이름과 학번 등의 항목을 갖고 있는 학생 구조체)
블록(Block)
- 파일에서의 데이터 입출력 또는 교환을 위한 단위
- 파일에서 데이터를 읽어들일 때 블록 단위 덩어리 데이터를 이용
파일(File)
- 프로그램을 구성하는 기본 단위
- 컴퓨터에 정보를 저장하는 단위
- 연관된 레코드들의 집합
데이터베이스(Database)
- 연관된 파일들의 집합
- 하나의 커다란 완성 정보 집합체
데이터뱅크(Databank)
- 여러 데이터베이스의 집합
또한 SI단위계를 기반으로 하는 크기 단위를 덧붙여 쓴다. 특히, 10의 3n승 기반의 단위를 이용한다.
- Y(Yotta) = 1024
- Z(Zetta) = 1021
- E(Exa) = 1018
- P(Peta) = 1015
- T(Tera) = 1012
- G(Giga) = 109
- M(Mega) = 106
- K(Kilo) = 103
- h(Hecto) = 102
- da(Deca) = 101
- d(deci) = 10-1
- c(centi) = 10-2
- m(mili) = 10-3
- μ(micro) = 10-6
- n(nano) = 10-9
- p(pico) = 10-12
- f(femto) = 10-15
- a(atto) = 10-18
- z(zepto) = 10-21
- y(yocto) = 10-24
이런 단위를 컴퓨터에서 이용하는 예로는 용량과 전송속도 등이 있다.
- 용량(Byte): 512MB, 16GB, 4TB
- 데이터 전송속도(bps, bit per second): 3 Mbps, 100 Mbps, 1 Gbps
마지막으로, 처음으로 돌아가 컴퓨터가 500GB라고 적힌 디스크 용량을 실제로는 465GB만 인식하는 이유에 대해 알아보자.
SI 단위 기준 K(Kilo)는 103(=1,000)이지만 컴퓨터는 이진법을 사용해 이와 비슷한 210(=1,024)을 기준으로 계산한다. 그 때문에 500,000,000,000B는 표현상으로는 500GB가 맞지만 컴퓨터에서는
500,000,000,000
= 488,281,250K = (500,000,000,000 / 1,024)
≒ 476,837M (488,281,250 / 1,024)
≒ 465G (467,837 / 1,024)
이와 같이 각 단계별로 1,024를 나눈 용량으로 계산한다. 이 때문에 500GB짜리 디스크는 컴퓨터에서 465GB가 되는 것이다.
'컴퓨터 공학(Computer Engineering) > 자료구조(Data Structure)' 카테고리의 다른 글
떡국 = (떡국떡)국 = ((떡국떡)국떡)국... [재귀프로그램] (0) | 2021.04.03 |
---|---|
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(2^n) < O(n!) [시간복잡도] (0) | 2021.04.03 |
65 83 67 73 73, 이것은 컴퓨터의 글자다. [컴퓨터의 숫자와 문자 표현] (1) | 2021.04.03 |