C#의 기본 초급.2 - 데이터를 보관하자

by 맛난호빵 posted Apr 12, 2015
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

데이터 보관

계산을 하기 위해서는 값들을 모두 기억하고 있어야합니다. 종이에 메모를 해놓건 머리로 기억을 하건 '데이터를 보관'해야합니다. 컴퓨터도 마찬가지로 데이터를 임시적이든 영구적이든 보관하지 않으면 계산을 할 수가 없습니다.

변수

 변수는 말그대로 '바뀌는 수'입니다. 앗, 그렇습니다. 수학에서 유래된 겁니다. 그럼 당연히 상수도 있겠죠. 하지만 때가 아닙니다. 상수는 아래에서 설명해드릴게요.

 컴퓨터에서의 변수는 '데이터를 담는 일정한 크기의 메모리 공간'입니다. 별것 아닙니다. 그저 우리는 코드에 변수를 형식과 함께 선언해줌으로써 컴파일러는 그 형식에 필요한 메모리 공간을 '알아서'예약해줍니다.


 변수 선언은 다음과 같이 할 수 있습니다.

// (형식) (식별자(변수의 이름));
int x;

 이렇게 해두면 실행시 메모리에 다음과 같은 꼴이됩니다.

변수강좌1.png

 자, 여기에 데이터를 할당해볼까요?

// (식별자) = (데이터);
x = 100;

 여기에 쓰인 '='은 대입 연산자라고 합니다. 수학하고 되게 비슷하죠?

변수강좌2.png


 하지만 실제로 프로그래밍 할때 둘을 일일히 나눠서 작성하면 비효율적입니다. 그래서 대부분의 언어에서는 다음과 같이 선언과 데이터 할당을 동시에 할 수 있습니다.

// (형식) (식별자) = (데이터);
int x = 100;

 같은 형식의 변수를 여러번 선언할때도 한꺼번에 선언해서 효율적으로 프로그래밍 할 수 있습니다.
(형식) (식별자1), (식별자2), (식별자3)...;
int a, b, c;
int x = 100, y = 200, z = 300;

형식

 물건을 보관할때는 그냥 집어 넣는 경우도 있지만 대부분의 경우에는 종류별로 정리해서 보관하는 경우가 많습니다. 컴퓨터에서도 데이터의 사용방법에 따라 분류합니다. 그것을 돕는 것이 바로 형식입니다.

 C#에서의 형식은 값 형식과 참조 형식으로 나뉘어집니다. 값 형식은 값 자체를 갖는 데이터 형식이고 참조 형식은 메모리상에서 값이 있는 위치를 갖고 있는 데이터 형식입니다. 이 둘을 좀더 정확하게 이해하려면 객체지향 프로그램에서 사용하는 두가지 메모리 영역에 대해서 알고 있어야합니다.

스택

 값 형식의 데이터는 이 스택이라는 영역에 저장됩니다. 스택(stack)은 말 그대로 무더기라는 뜻인데, 책 무더기를 떠올리시면 됩니다. 책보고나서 정리하기 귀찮으면 쌓아 놓잖아요? 아래에 있는 책을 (무더기에서)꺼내려면 일단 위에있는 책을 걷어내야 하죠.

 만약 다음과 같은 코드가 있다고 치죠.

{
    int a = 100;
    int b = 200;
}

 그렇게되면 다음 그림과 같이 순차적으로 스택 메모리에 적재되었다가 블록 끝에서 걷혀져서 제거됩니다.

New canvas.png

 참조 형식의 데이터는 힙에 저장됩니다. 엉덩이를 말하는 것이 아닙니다. heap을 말하는겁니다. 힙 또한 무더기라는 뜻을 갖고있지만 '정리가 좀 안된'무더기를 말합니다. 즉 매우 게으른 사람의 집과도 같은 구조이죠. (난장판이라는 겁니다.) 이 난장판 속에서 필요한 물건을 찾기위해서는 그 물건의 위치를 기억하고 있어야만 합니다.

asdfasdf.png

이 난장판을 청소하기 위해서 C#에서는 가비지 컬렉터라는 청소부를 두었습니다. 만약 필요가 없어진 물건이라면 청소부가 방문했을때 제거됩니다.

asaszx.png