본문 바로가기

프로그래밍을 처음 시작합니까?

#03. 메모리의 개념

 

메모리의 개념 

 

지난 시간에는 순차적 코딩을 통해, 간단한 출력문에 대한 코드를 확인해 보았습니다.

그중 메모리에 대한 몇가지 개념과 특성을 알아보려고 한다.

(우리는 이번 게시물을 통해 int, float등에 대한 심도있는 학습을 하고자 하는게 아님을 분명히 밝힙니다. 그러니 어려운 이야기 나올까봐 쫄지 마시길...)

 

프로그래밍은 일단 메모리를 얼마나 적절하게 사용하느냐에 따라 작업에 대한 이해도가 달라지게 됩니다.

 

하지만 이러한 개념적 방식은 어떠한 곳에서도(필자가 아는 한...) 강의나 수업하지 않습니다.

 

일단 우리가 코딩을 하는데 있어서 사용되는 다양한 언어가 있습니다.

(SQL, Python, C, C++, C#, java, lua, 등등... 매우 많습니다...)

 

모든 언어의 공통점은 메모리를 활용한다는 점이고, 메모리로 시작해서 메모리로 끝난다는 것입니다.

(단지 그 차이는 어떠한 언어인지와, 어떠한 API소스를 지원하느냐의 차이입니다.)

 

우리가 코딩하는데 사용되는 언어는 대부분 사람이 사용하는 언어(영어)이며, 컴퓨터는 0과 1(전도 상태(전기가 통하는), 비전도 상태(전기가 통하지 않는))로 이루어져 있을 뿐입니다.

 

사람이 사용하는 언어역시 다양합니다.(문화적 의미가 아니라 표현에 관한 의미로써 입니다.)

예를들어, 수를 사용하는데 있어서는 숫자를 사용하며, 문자를 사용함에 있어서는 글을 사용합니다.

 

그리고 '수'의 끝은 사실 무한대이므로, 0과 1로 그 수를 모두 표현하면, 사람이 사용함에 있어 필요한 문자의 표현은 사실상 불가능하게 됩니다.

(말이 좀 어려운것 같은데, 기본적으로 기계는 특별한 제어가 없이는 문자와, 숫자를 구별할 수 없다는 것입니다.)

 

정상적인 프로그램의 구동을위해는 프로그래머는 메모리에 필요한 모든 자료를 0과 1로 저장할 필요가 있으며(사실상 프로그래머가 0과 1로 프로그래밍을 하는건 아닙니다.), 프로그래머는 해당 자료마다 그 특징(문자인지 숫자인지 그밖의 것들인지)을 일종의 태그와 같이 지정해 줄 수 있는데, OS는 이러한 태그를 바탕으로 해당 자료의 형태가 어떠한 자료인지를 파악하기 때문에 그러한 태그를 "자료형"이라고 합니다.

 

흔히 쓰는 int는 숫자를 위한 인트 자료형 이라고 하며, OS가 메모리에서 해당 자료를 읽어 들일때, 해당 자료가 숫자임을 알 수 있습니다.(각 자료형은 그 용량에 제한되어 있는데 *반드시 그런건 아님* 현재는 그런것을 다루진 않겠습니다.)

(보다 정확하게는 정수임을 알수 있게 해주는..)

 

마찬가지로 char는 문자를 위한 문자(Chracter) 자료형 이라고 하며, OS가 메모리에서 해당 자료를 읽어 들일때, 해당 자료가 문자임을 알 수 있도록 합니다.

 

여기서 좀 위험한 개념을 알려 드리고자 합니다.

(위험한 개념이란 반드시 그런것은 아니지만 처음 개념을 잡으실때, 이렇다 라고 알고 계시는 것이 가장 좋기 때문에 "위험한"이라는 말을 사용합니다.)

 

int와 cahr과 같이 "각기 다른 자료형은, 서로 대입이 불가능합니다."

(사실 일부 가능합니다. 하지만 그러한 대입은 자료의 형태가 변경되며, 변경과정에서 자료의 손실등이 발생될 수 있습니다. 그러한 까닭에 결과물에 오류등이 발생될 수 있습니다.

 아래서 언급하게 될 구조체, 클레스등과 같은 자료형은 서로다를경우 대입이 불가능합니다. 그러한 까닭에 통칭 불가능하다고 이해 하시기 바랍니다.)

 

나중에 배울 구조체, 클레스의 경우 자료형들의 묶음 입며, 그 묶음의 구조는 배열과 같으며, 선언되기 전, 생성된 구조체나 클레스는 하나의 자료형으로 독립됩니다.

 

[요점정리] 

1. 메모리는 저장된 자료가 어떠한 자료인지 알기 위해 "자료형"으로 구분되어 저장된다.

2. 서로 다른 "자료형"끼리는 대입이 불가능하다.

 

 

이는 배열에 대해 설명하면서 차근차근 집어 가도록 하겠습니다.