[자료구조-1] 변수, 배열
CS/자료구조

[자료구조-1] 변수, 배열

안녕하세요.

오늘은 변수(variable), 배열(array)에 대해 배워보려 합니다!

 

1. 변수

 - 하나의 값을 저장할 수 있는 저장 공간

 

2. 배열

 - 배열(array)은 같은 타입의 변수들로 이루어진 유한 집합

 

사전적 의미는 위와 같습니다.

하지만 위의 의미만 가지고는 바로 이해하기는 어렵겠죠?

 

변수

 

컴퓨터는 2진 기본 정보인 0과 1로 이루어져 있습니다.

그래서 컴퓨터의 자료 단위 중 최소 단위가 1bit입니다.

 

1bit는 0과 1을 표현하는 컴퓨터 메모리 단위 중 가장 작은 단위입니다.

 

1bit 데이터 표현식 (비유 이미지입니다.)

마치 위와 같이 어떤 한 공간에 데이터가 있나(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가지로 나누어 보았을 때 위와 같이 정리가 됩니다.

 

정수형

정수형 데이터 표현식 (1byte)

정수형은 맨 앞의 비트는 부호 비트, 그 뒤는 값을 나타내는 비트들로 구성되어 있습니다.

더보기

관련 용어

Overflow : 저장하는 값이 정해진 값보다 커져 부호 비트의 값이 1로 변경되어 양수 값이 음수로 변경되는 현상

Underflow : 저장하는 값이 정해진 값보다 작아져 부호 비트의 값이 0으로 변경되어 음수 값이 양수로 변경되는 현상

 

실수형

실수형 데이터 표현식

실수형은 맨 앞의 비트는 부호 비트, 그 뒤는 지수 비트, 그 뒤는 가수 비트들로 구성되어 있습니다.

 

이렇게 다양한 방법으로 값을 변수에 저장할 수 있습니다.

 

그렇기에 각자의 상황에 맞게 변수를 선언하고 사용하면 좋겠죠?

 

배열

배열(array)은 같은 타입의 변수들로 이루어진 유한 집합

이제 같은 타입의 변수들로 이루어져 있다는 것까지는 이해가 되실겁니다. (안되면 ㅈㅅ)

 

그렇다면 이 집합이 어떻게 이루어져 있는지가 궁금하실 텐데요.

 

배열 메모리 표현식

배열은 변수들을 메모리에 연속되게 할당하여 저장합니다. (위 이미지에 한 블록이 변수 하나라고 생각하시면 됩니다.)

그래서 array를 접근하여 n번째 데이터를 가져올 때 array[n]과 같이 데이터를 접근하여 가져오게 됩니다.

더보기

관련 용어

ArrayIndexOutOfBounds : 할당된 배열 크기에 맞지 않는 인덱스를 접근할 때 발생되는 현상

 

장점 : 굉장히 빠른 속도로 메모리에 접근하여 데이터를 가져올 수 있습니다.

단점 : 한번 선언된 배열의 크기는 변경할 수 없다.