안녕하세요.
오늘은 변수(variable), 배열(array)에 대해 배워보려 합니다!
1. 변수
- 하나의 값을 저장할 수 있는 저장 공간
2. 배열
- 배열(array)은 같은 타입의 변수들로 이루어진 유한 집합
사전적 의미는 위와 같습니다.
하지만 위의 의미만 가지고는 바로 이해하기는 어렵겠죠?
변수
컴퓨터는 2진 기본 정보인 0과 1로 이루어져 있습니다.
그래서 컴퓨터의 자료 단위 중 최소 단위가 1bit입니다.
1bit는 0과 1을 표현하는 컴퓨터 메모리 단위 중 가장 작은 단위입니다.
마치 위와 같이 어떤 한 공간에 데이터가 있나(1) 혹은 없나(0)로 데이터를 표현합니다.
그렇다면 위에 말씀드렸듯이 최소 단위가 1bit라면 그 위에 단위들도 있겠지요?
데이터 단위는 아래와 같습니다.
1byte = 8bit (바이트)
1KB = 1024byte (키로바이트)
1MB = 1024KB (메가바이트)
1GB = 1024MB (기가바이트)
1TB = 1024GB (테라바이트)
1PB = 1024TB (페타바이트)
그렇다면 다시 변수로 돌아와서 변수는 값을 저장하는 공간이라고 하였습니다.
공간은 정해져 있고 값은 어떤 값이 들어올지 모른 상태에서 무한정 크게 할 수 없습니다.
그래서 변수의 타입이 생겨나게 되었고 몇 가지의 특징에 따라 분류하여 공간을 할당하도록 하였습니다.
크게 2가지로 나누어 정수, 실수로 이루어져 있습니다.
구분 | 자료형 | 특징 | 크기 | 범위 |
정수 | boolean | 논리형 | 1byte | true, false |
byte | 데이터 | 1byte | -128 ~ +127 | |
char | 문자 | 2byte | '\u0000' ~ '\uFFFF' | |
short | 정수 | 2byte | -32,768 ~ +32,767 | |
int | 정수 | 4byte | -2,147,483,638 ~ +2,147,483,647 | |
long | 정수 | 8byte | -9223372036854775808 ~ +9223372036854775807 | |
실수 | float | 부동소수점 | 4byte | -3.402932347e+38~+3.40292347e+38 |
double | 부동소수점 | 8byte | -179769313486231570e+308~1.79769313486231570e+08 |
(위 표는 Java를 기준으로 만들어져 있습니다. ※ 다른 언어는 자료형이 조금 다를 수 있습니다. ex : C언어는 char가 1byte입니다.)
2가지로 나누어 보았을 때 위와 같이 정리가 됩니다.
정수형
정수형은 맨 앞의 비트는 부호 비트, 그 뒤는 값을 나타내는 비트들로 구성되어 있습니다.
관련 용어
Overflow : 저장하는 값이 정해진 값보다 커져 부호 비트의 값이 1로 변경되어 양수 값이 음수로 변경되는 현상
Underflow : 저장하는 값이 정해진 값보다 작아져 부호 비트의 값이 0으로 변경되어 음수 값이 양수로 변경되는 현상
실수형
실수형은 맨 앞의 비트는 부호 비트, 그 뒤는 지수 비트, 그 뒤는 가수 비트들로 구성되어 있습니다.
이렇게 다양한 방법으로 값을 변수에 저장할 수 있습니다.
그렇기에 각자의 상황에 맞게 변수를 선언하고 사용하면 좋겠죠?
배열
배열(array)은 같은 타입의 변수들로 이루어진 유한 집합
이제 같은 타입의 변수들로 이루어져 있다는 것까지는 이해가 되실겁니다. (안되면 ㅈㅅ)
그렇다면 이 집합이 어떻게 이루어져 있는지가 궁금하실 텐데요.
배열은 변수들을 메모리에 연속되게 할당하여 저장합니다. (위 이미지에 한 블록이 변수 하나라고 생각하시면 됩니다.)
그래서 array를 접근하여 n번째 데이터를 가져올 때 array[n]과 같이 데이터를 접근하여 가져오게 됩니다.
관련 용어
ArrayIndexOutOfBounds : 할당된 배열 크기에 맞지 않는 인덱스를 접근할 때 발생되는 현상
장점 : 굉장히 빠른 속도로 메모리에 접근하여 데이터를 가져올 수 있습니다.
단점 : 한번 선언된 배열의 크기는 변경할 수 없다.
'CS > 자료구조' 카테고리의 다른 글
[자료구조-4] 그래프(Graph) (0) | 2021.11.05 |
---|---|
[자료구조-3] 선형 리스트(ArrayList), 연결 리스트(LinkedList) (0) | 2021.11.03 |
[자료구조-2] 스택(Stack), 큐(Queue) (0) | 2021.10.27 |