본문 바로가기

IT 일반/자료구조(개념) - [인강] 코드잇, [대학원] 전공 수업

[코드잇-자료구조1 : 기본 자료구조들] 2. 컴퓨터가 데이터를 저장하는 법

본 게시물은 코드잇의(codeit) 자료구조 시리즈 강의 첫번째 주제인 '기본 자료구조들'을 듣고 정리한 게시물임을 알려드립니다.

- 강의 url : https://www.codeit.kr/topics/data-structure-basics?mediumTypedId=UGxheWxpc3Q6NjZkZDU5YWI4OTg1YTI3ZWRkOTdlOWUz


1. 스토리지 vs 메모리

자료구조의 목적

- 자료들을 어떻게 구조화할지 고민해서 데이터를 효율적으로 사용하는 것

- 컴퓨터에 데이터가 어떻게 저장되는지에 대한 최소한의 지식은 있어야 한다.

 

데이터가 저장되는 곳 : 스토리지(Storage), 메모리(Memory)

1) 스토리지

- 데이터가 영구적으로 저장되는 곳

- 컴퓨터에 저장해놓는 사진, 워드문서, 음악 등

- 사용자가 지우지 않는 이상 사라지지 않음 

사용자 PC의 스토리지에 대한 정보 (300gb정도 사용 가능)

 

특징

- 데이터를 저장하는 데 오래 걸린다.

- 데이터를 받아오는 데 오래 걸린다.

→ 정확히 언제 사용할지 모르겠는 파일을 저장

 

2) 메모리

- 데이터가 임시로 저장되는 곳

 

- 워드 파일에 과제를 작성할 때 저장을 누르지 않는 이상 메모리에만 저장됨. 저장을 눌러야지 스토리지에 저장됨

메모리 : 32 GB (컴퓨터 스펙 얘기할 때 램이 몇 gb 할 때)

 

특징

- 데이터를 저장하는 데 빠르다.

- 데이터를 받아오는 데 빠르다.

 

메모리와 스토리지가 둘 다 필요한 이유

 

- 스토리지에서 한장면씩 갖고오면 시간이 너무 오래걸림

- 영화 파일을 켜면 스토리지에 있던 영화를 메모리로 복사함. 그래서 쾌적하게 볼 수 있는 것

- 영화를 끄면 메모리에 있던 영화는 지워지고 스토리지에 있던 영화만 남게됨

자료구조를 공부할 때?

- 스토리지를 얘기할 일은 없고, 결국 데이터를 메모리에서 잘 사용하도록 하는 게 목적

 

2. RAM : Random Access Memory(임의 접근 메모리)

메모리는 비유를 하자면 하나의 긴 띠라고 생각할 수 있다.

- 일정한 칸으로 나눠져 있다.

- 각 칸에 데이터를 저장할 수 있다.

- 각 칸은 자신만의 주소가 있다. (데이터를 찾을 수 있게끔)

컴퓨터가 아래의 값 x, y를 받아오는 방식

- 임의 접근 : 저장 위치를 알면 접근할 때 항상 일정한 시간이 걸림

- 다시말해, 램은 원하는 값이 95에 있든 183에 있든 주소와 상관없이 다 한번에 찾을 수 있다는 것.
- 즉, 메모리에 저장한 데이터 접근 시간 복잡도 : O(1)

순차접근과 임의 접근

자료구조를 공부할 때 중요한 점

 

- 메모리는 임의 접근으로 동작하고 있다는 걸 늘 기억하고 있어야 함

 

3. 메모리의 기본 단위 : 바이트

 

메모리는 하나의 긴 띠라고도 표현했는데, 이 띠는

  • 일정한 칸으로 나눠져 있고
  • 각 칸에 데이터를 저장할 수 있고
  • 각 칸은 자신만의 주소가 있는

특징이 있음

 

메모리의 기본단위 : 바이트

- byte : 메모리 한 칸이 저장할 수 있는 가장 기본적인 용량의 단위

 → 자료 구조를 공부하면서 바이트라는 단위가 정확히 얼만큼의 정보를 저장하는 단위인지는 몰라도 되고, 매우 작은 단위라고만 알고 있으면 된다.

- 바이트가 아닌 다른 크기의 용량을 담는 저장 장치들도 있긴 한데, 대부분의 현대 컴퓨터 시스템들은 메모리 한 칸에 바이트만큼의 데이터를 저장
- 일상 생활 속에서도 많이 사용되는 이 '바이트'라는 용어는 흔히 영상, 문서, 음성 파일이나, RAM 또는 컴퓨터의 스토리지의 크기를 표현할 때, 160 킬로 바이트(kB), 10 메가 바이트(MB), 32 기가 바이트(GB) 이런 식으로 많이 표현함

→ 이는 데이터의 용량이 몇 바이트인지 표현한 것. 정확히 말하면,

  • 킬로 바이트 = 1,000 바이트
  • 메가 바이트 = 1,000,000 바이트
  • 기가 바이트 = 1,000,000,000 바이트

이만큼의 저장 공간 용량들


- 자료 구조를 배우면서 바이트나 다른 저장 공간 단위들을 심도 있게 다루지는 않을 건데, 그래도 자료 구조에서는 이해하면 도움이 되는 개념/용어이니까,

바이트는 컴퓨터 저장 공간 용량을 나타내는 단위다.
메모리 한 칸에 담기는 데이터 용량은 1 바이트다.

 

이 정도는 이해하고 넘어가는 게 좋음

 

4. 레퍼런스

- 언어마다 조금 다르긴한데 파이썬에서 X는 95라는 값 자체를 갖고 있는 게 아니라 95가 담겨있는 이 메모리 주소를 이용해서 정숫값 95를 찾아오는 것

레퍼런스의 개념

- 레퍼런스 : 데이터에 접근하게 해주는 값으로, 엄밀히말하면 레퍼런스와 주소는 다름. 그러나 자료구조를 공부하는 초심자 입장에서는 이 둘을 구분하는 것은 의미가 없으니 앞으로 자료구조 강의에서는 이 둘을 혼용해서 사용할 예정

- x와 5를 더할 때, x에는 95가 아니라 레퍼런스가 담겨 있는데, 이 레퍼런스와 5를 더하게 되는 것일까? 

- x에 레퍼런스가 담겨 있는 건 맞지만, 값을 실제로 사용할 때는 파이썬이 알아서 값을 받아와 준다.

- 즉, 파이썬이 메모리에 있는 95를 받아와서 95+5를 해주는 것

- 그래서 "x가 정수 95를 갖고 있다" 라고 하는 말은 엄밀히 말하면 틀린 표현

 

5. 데이터의 주소

데이터가 저장되어 있는 주소를 알아내는 방법을 알아보자.

파이썬 id 함수

- id 함수 : 저장한 데이터의 메모리 주소를 정수로 표현한 값을 알아낼 수 있음

- 여러 타입의 데이터를 저장하고 id 함수를 써서 메모리 주소를 출력시켜보겠음

# 여러 데이터를 저장한다
list1 = [1,2]
int1 = 0
float1 = 3.14
set1 = set()
tuple1 = (2,3)

# 저장한 데이터의 메모리 저장 위치를 받아온다.
print(id(list1))
print(id(int1))
print(id(float1))
print(id(set1))
print(id(tuple1))

 

- 데이터가 각각 다른 메모리 주소에 저장돼 있음
- 주소는 코드를 돌릴 때마다 다르게 나옴

같은 주소에 저장돼 있는 데이터 : 똑같은 주소에 저장돼 있는 데이터는 똑같은 데이터

우선 세 변수 list1, list2, list3를 만들어보자.

- list1은 정수 1, 2를, 그리고 list3은 1, 2, 3을 담고 있는 리스트
- 그리고 list2에  list1를 지정했음

→ 메모리에서 만든 하나의 같은 리스트를 list1, list2라는 두 개의 다른 변수가 가리키고 있는 것

- 이렇게 여러 변수가 같은 메모리를 가리키는 것Aliasing이라고 함

list1 = [1, 2]
list3 = [1, 2, 3]

# Aliasing을 통해 list1과 list2를 같게 한다
list2 = list1

# 두 데이터의 메모리를 출력한다
print(id(list1))
print(id(list2))
print(id(list3))

 

 

- id 함수를 써서 list1과 list2의 메모리 주소를 출력해 보면 같다고 나온다.

- list3는 다른 주소에 저장되어 있음

- list1과 list2는 서로 같은 리스트를 가리키고 있기 때문에 똑같은 메모리가 출력되고, list3는 전혀 다른 리스트를 가리키고 있기 때문에 다른 메모리가 출력

 

6. 연습문제


연습문제 정답

질문 1 

 

질문 2