개발일기 [Python 파이썬]

What is Data? 데이터 구조 (Data Structure)

neullo 2024. 3. 8. 15:55

1. 데이터란 무엇인가?

경험이나 관찰로 얻어진 조직화된 정보 모음을 데이터라고 한다. 

이전에는 프로그램과 데이터로 나눠서 프로그램은 명령과 같은 컴퓨터 수행할 작업, 코드가 아닌 모든 것이 데이터라고 했다. 그런데 현재 우리가 사용하는 컴퓨터 노트북과 같은  현대 컴퓨터의 아버지라 불리는 von neumann (1903-1957)라는 분이 "프로그램도 일종의 데이터다"라는 선언을 하며 프로그램 내장식 컴퓨터가 등장하며 개인이 들고 다니는 컴퓨터의 시대가 열렸다.

 

2. 데이터는 컴퓨터에 어떻게 저장될까?

저장되는 방식으로는 총 두 가지로 스토리지(storage)와 메모리(memory)가 있다.

 

2.1 스토리지(storage)

스토리지(storage)란 데이터가 영구히 저장되는 곳으로 HDD, SSD, USB, Cd 등 영구히 저장되는 장치로 용량이 크다는 장점이 있지만 속도가 느리다는 단점이 있다. 

 

a = 1+2
a = 3 

이라는 계산은 누가 할까? 빠른 처리가 가능한 CPU가 처리한다. 그런데 아무리 처리를 빨리 해도 보조해 주는 장치가 속도가 느리면 아무리 성능이 좋은 CPU를 보조할 수 있는 메모리의 필요성이 되두되었다.

 

2.2 메모리(memory) 

 

컴퓨터 안에도 수많은 페이지와 앱을 사용하고 있고 그 프로그램을 동시에 돌리고 있는데, 이렇다 보니 메모리를 효율적으로 사용하는 것이 중요하다. 데이터를 임시적으로 저장되는 메모리(memory)는 용량이 적지만 속도가 매우 빨라, 순차적으로 데이터를 사용하지 않고, 랜덤 하게 쓰고 지우는 RAM(Random Access Memory)를 사용한다. 즉, 랜덤 하게 데이터를 처리해 저장하게 된다. 이때 데이터가 저장되는 위치, 칸에 주소값(address)을 지정해 찾아가게 한다. 

 

3. 데이터 타입 (Data Type)

미사일이 날아온다고 가정해 보자. 이때 우리는 미사일을 막기 위해 좌표로 만들어서 컴퓨터에게 알려줘야 하는데, 매번 초기화하던 1991년 당시 다양한 휴먼에러가 발생하며 문제가 번복해 발생하자 정확도를 높이기 위해 데이터 타입은 현실세계의 데이터를 0과 1로 표현해서 메모리에 저장하기 위한 방법으로 생겨났다.

 

예를 들어 180, 12.5라는 소수, 's'라는 알파벳, 'samsung'이라는 단어등 다양한 데이터를 저장하는데, 메모리가 랜덤 하게 저장하다 보니 저장하려는 공간이 따로 필요하고 매번 지정해서 저장하는 게 비효율적이게 된다. 효율적으로 저장하기 위해 이때 등장하는 게 데이터 타입인데 다루는 데이터 특징을 반영하여, 숫자라면 '어디 칸' '몇 칸'에 저장하자 라는 할당 약속을 하게 된다. 우리가 코딩에 파이썬에 사용하는 Int, string, char, int 같은 모든 함수는 또한 Class에 의해 정의된 데이터 타입이라 할 수 있다.

 

User defined data type

더 다양한 데이터 구조를 표현하고, 데이터 타입을 정의하고 싶을 때 class를 사용한다. 

 

4. 자료구조 (Data Structure)를 사용하면 뭐가 좋을까?

컴퓨터의 메모리를 효율적으로 저장하고 활용하는 방법을  자료 구조하고 (Data Structure)라고 한다. 데이터 구조를 전체적으로 파악해서 효율적으로 사용할 수 있게 된다는 장점이 있다. 예를 들어 리스트는 선형 자료구조로 데이터를 넣는(append) 연산을 해야 한다.

 

 


4.1 추상 데이터 타입

Abstract data type = structured data + operation.

데이터에 맞는 자료구조를 이용해서 데이터를 표현하면 이해와 활용이 쉽게 된다. 

 

트리라는 자료구조를 보면 아래 파일(my_file)을 보면 영상인지, 사진인지, 몇년도 자료인지 모두 알 수 있게 된다.

 

 

4.2 현실세계의 데이터 타입을 추상화해서 만든 자료구조 (구조 + 연산 = 자료구조)

 

구조화된 데이터를 필요한 연산과 함께 묶어서 표현하는 방법

현실세계 있는 것을 컴퓨터로 옮기려고 할 때, 추상화가 필요하기 때문에, 데이터 타입을 추상화해서 만드는 게 자료구조다. 그리고 그 데이터를 가지고 활용할 수 있는 연산이 합쳐져야 하나의 자료구조라고 할 수 있다.

 

 

현실세계 있는 것을 컴퓨터로 옮기려고 할때, 추상화가 필요하기 때문에, 데이터 타입을 추상화해서 만드는게 자료구조다. 그리고 그 데이터를 가지고 활용할 수 있는 연산이 합쳐져야 하나의 자료구조라고 할 수 있다.

 

 

5. 스택 (stack)

 

스택은 물건을 쌓아 올린듯, 자료를 쌓아 올린 형태의 자료구조로 구조와 연산이 필요하다. 

 

스택의 특징:

- 가장 마지막에 들어간게 가장 처음에 나온다.

- 후입선출 Last in first out (LIFO)

- 가장 위에서만 데이터의 삽입과 삭제가 일어난다.

- 빨간색이 TOP

ex) stack overflow: 여기서 stack은 가장 최신의 정보가 가장 먼저 검색된다는 의미

 

 

 

 

 

pop()

스택에서 제일 위에 있는 것을 제거하는 것

 

 

 

 

push()

데이터 넣는것

 

 

 

" 재귀함수recursive function call 한 것을 관리하기 위해 만든것이 Stack."

5! = 5 *4*3*2*1 라는 factorial을 재귀 함수로 구할때 아래와 같이 Factorial 1 부터 함수가 리턴되어 쌓인다. 

Def factorial(n):
	if n==1:
    return 1
    
    else:
    return n*factorial(n-1)