티스토리 뷰
컴퓨터의 용도는 정말 다양하다. 계산기로 쓰거나, 자료를 저장하는 기록 매체로 사용도 되고
사진이나 음악을 다룬느 미디어 매체로 사용도 된다.
용도가 다양해짐에 따라 컴퓨터가 다루어야 하는 데이터의 종류도 다양해졌다.
컴퓨터가 무엇을 하느냐는 소프트웨어가 결정한다. 이 소프트웨어는 사람이 만든다.
소프트웨어가 다뤄야 하는 수많은 데이터는 만든 사람이 책임지고 돌봐야 한다.
C#은 이런 일을 돕기 위해 다양한 종류의 데이터 형식(Data Type)을 제공한다.
이번 2. 데이터의 종류에서 다룰 내용은 아래와 같습니다.
1. 기본 데이터 형식(Primitive Type)
2. 상수(Constant)
3. 열거형(Enum)
위 데이터 타입은 기본 데이터 형식이고 C#은 이 기본 데이터 형식을 부품 삼아 구성되는
"복합 데이터 형식(Complex Data Type)" 을 지원합니다.
복합 데이터 형식은 구조체와 클래스, 배열 등이 있는데 이번 글에서는 해당 내용이 나오지 않는다.
데이터 형식의 분류
데이터 형식은 이렇게 분류가 되는데 값 형식과 참조 형식의 개념은 변수를 먼저 알아본 후 설명하겠습니다.
변수
변수를 코드에서 보자면 값을 대입시켜 변화시킬 수 있는 요소 이지만,
메모리 쪽에서 보면 "데이터를 담는 일정 크기의 공간" 이라는 의미를 갖기도 합니다.
여기서 일정 크기는 데이터 형식에 따라 결정이 됩니다.
그렇기 때문에 변수를 선언할 때면 이 변수를 위해 메모리에 이만큼의 공간이 마련됐겠구나도 생각하면 좋습니다.
변수 선언하기
int x;
제일 먼저 데이터 형식(int)을 명식해주고 그 다음에 변수 식별자(이름)을 명시합니다.
그리고 문장 끝에 세미콜론을 붙여 컴파일러에게 해당 문장의 끝을 알려줍니다.
이렇게 하면 컴파일러는 int 형식을 위해 메모리 공간을 할당하고 이 공간을 x라는 식별자가 사용할 수 있도록 준비한다.
그럼 2000번지에 int x라는 이름으로 접근을 할 수 있게 된다. 여기에 x = 100; 이렇게 대입 연산자로 데이터를 입력하면
아래와 같이 x에 할당된 메모리 공간에 100이 기록된다.
초기화
초기화란 변수에 최초의 데이터를 할당하는 것. 변수 선언 후 아무런 데이터를 넣어주지 않으면 "쓰레기 데이터"가 들어간다.
따라서 개발 중인 프로그램이 쓰레기 데이터때문에 제대로 된 동작을 하지 않는오류가 발생할 수도 있다.
값 형식과 참조 형식
값 형식(Value Type)은 변수가 값을 담는 데이터 형식을 말하고,
참조 형식(Reference Type)은 변수가 값 대신 값이 있는 곳의 위치를 담는 데이터 형식을 말한다.
이것을 이해하려면 C#으로 작성한 프로그램이 사용하는 두 가지 메모리 영역인 스택과 힙에 대해 알아야 한다.
스택과 값 형식
스택은 쌓여 있는 책 더미와 같은 구조로 생긴 메모리입니다.
먼저 쌓은 책을 꺼내려면 위에 있는 모든 책을 걷어내야 합니다. 스택 메모리도 이렇게 동작을 합니다.
다음 코드들로 예시를 들어보겠습니다.
{
int a = 100;
int b = 200;
int c = 300;
}
다음 3개의 변수는 스택에 쌓였다가 코드 블록이 끝나면 스택에서 제거가 됩니다.
다음 그림은 위 코드가 한줄씩 실행될 때 마다 스택 메모리에 데이터가 적재되었다가 걷혀가는 과정입니다.
다시 말하면 코드 블록 안에서 생성된 모든 값 형식의 변수들은
프로그램 실행이 중괄호 "}"를 만나면 메모리에서 제거된다.
이 메모리가 제거되는 것은 스택의 장점이자 단점입니다.
코드 블록이 끝나는 시점과 상관없이 데이터를 유지하고 싶을 때는 이런 메모리 구조가 발목을 잡습니다.
힙과 참조형식
힙은 스택과 달리 데이터를 스스로 제거하지 않고 CLR의 가비지 컬렉터를 사용합니다.
가비지 컬렉터는 힙에 더 이상 사용하지 않는 객체가 있으면 그 객체를 쓰레기로 간주하고 수거하는 기능을 합니다.
힙에 데이터를 올려 놓으면 코드 블록이 종료되는 지점과는 상관없이 데이터가 계속 유지가 됩니다.
그리고 이 데이터를 더 이상 프로그래머가 사용을 하지 않을 때 가비지 컬렉터가 처리를 해서 메모리에서 사라집니다.
참조 형식의 변수는 힙과 스택을 함께 이용합니다.
힙 영역에는 데이터를 저장하고 스택에는 데이터를 저장하고 있는 힙 메모리 주소를 저장합니다.
{
object a = 100;
}
위 코드를 CLR이 실행하면 실제 값 100은 힙에 저장되고 a는 저장된 힙의 주소를 스택에 저장합니다.
코드블록이 끝나게 되면 스택에 있는 a 변수는 사라지게 되고 힙에는 데이터가 여전히 남아있습니다.
이 데이터들은 사용이 되지 않게되서 가비지 컬렉터가 수집해갑니다.
이번 글에서는 이 정도로 마무리 하겠습니다.
'C#' 카테고리의 다른 글
3. 메소드란? (0) | 2020.01.28 |
---|---|
2. 데이터의 종류(4) - object, 상수, 열거, var (0) | 2020.01.25 |
2. 데이터의 종류(3) - 부동 소수, 문자와 문자열, 논리 형식 (0) | 2020.01.25 |
2. 데이터의 종류(2) - 정수형 데이터 (0) | 2020.01.25 |
1. C#의 첫걸음 (0) | 2020.01.20 |
- Total
- Today
- Yesterday
- 알고리즘
- visual studio code
- 생활코딩#동영상을#글로#html
- 선택자
- php
- 안드로이드 스튜디오
- 차이점
- 관계형데이터베이스
- inline
- 생활코딩#MySQL
- 정렬
- GRID
- 동영상을
- 네트워크 프로그래밍
- Link
- 언리얼엔진
- HTML
- PHP&MySQL
- 문자열
- 객체
- 생활코딩
- 조건문
- TAG
- 기초
- 글로
- 언리얼엔진4
- css
- 변수
- C언어
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |