1 분 소요

1. 변수

변수는 데이터를 저장하는 데 사용되는 메모리 공간을 나타낸다. 각 변수에는 고유한 이름이 부여가 되며, 프로그램 내에서 해당 변수에 접근하여 읽거나 수정할 수 있다.

먼저 변수를 선언하기 위해 데이터의 유형을 먼저 지정해야 한다. 변수가 값을 할당받기 위해 사용자가 변수의 크기와 종류에 대해 파악하고 할당해주어야 한다.

데이터의 종류와 크기에 따른 분류는 다음 아래와 같다.

  1. int: 정수의 값을 이용하며 32비트(4바이트)의 크기를 가지고 있다.
  2. double: 소수점을 이용하는 값에 사용되며 64비트(8바이트)의 크기를 가진다.(float형은 32바이트의 부동 소수점 숫자를 나타낸다.)
  3. char: 단일 문자를 저장하는데 사용되며 16비트(2바이트) 크기를 가진다.
  4. bool: 참(true)과 거짓(false)를 구분하는데 사용되며 환경에 따라 다르지만 일반적으로 1바이트를 사용한다.
  5. string: 문자열을 저장하는데 사용되며 각 문자마다 16비트(2바이트)를 사용하므로 길이에 따라 달라지지만 길이가 7인 문자열은 14바이트의 메모리를 할당한다.

변수의 선언 방식은 다음 아래와 같다.

type(형식) variableName(변수 이름);

값을 할당시키기 위해서는 다음 아래와 같이 “=” 등호를 붙여서 메모리에 적재한다.

string variableName = "단지";
int variableAge = 100;  

2. 메모리 구조

위처럼 변수는 두 가지의 메모리 구조를 가지는데 바로 값 형식(Value Type)참조 형식(Reference Type) 두 가지로 나뉜다.

1. 값 형식(Value Type) 값 형식의 변수는 메모리의 스택(Stack)영역에 데이터를 직접 저장한다. 이런 변수들은 기본적으로 복사 시에 값에 의한 전달(Pass By Value)이 일어나며, 한 변수의 값을 다른 변수로 할당하면 원래의 값이 복사되어 새로운 메모리 공간에 할당되게 된다. 따라서 한 변수에서 값을 변경하더라도 다른 변수에는 영향을 주지 않게 된다. C#에서는 기본적으로 위와같은 int, double, char, bool에 더하여 구조체와 열거형인 enum형식도 값 형식이다.

int a = 10;
int b = a; // a의 값을 b에 복사
b = 20; //b를 바꿔도 a에는 그대로 10의 값을 가지고 있음.
Console.WriteLine(a); 

이것이 값 형식이다.

2. 참조 형식(Reference Type) 참조 형식의 경우, 실제 데이터는 힙(Heap)영역에 저장되고, 그 데이터를 가리키는 참조가 스택(Stack)영역에 저장된다. 만약에 참조하는 대상이 같으면 동일한 대상을 가리키게 된다. 이런 타입은 복사 시 참조에 의한 전달(Pass by Reference)이 일어나며, 한 참조에서 값을 바꿔버리게 되면 다른 참조에도 영향을 미치게 된다. C#에서는 클래스(Class), 인터페이스(Interface), 배열(Array), 델리게이트(delegate), 문자열(string) 등은 모두 참조 형식이다.

StringBuilder a = new StringBuilder("Hello");
StringBuilder b = a;
b.Append("World");

Console.WriteLine(a); //Hello World 출력
Console.WriteLine(b); //Hello World 출력

이처럼 StringBuilder 클래스 인스턴스 a와 b가 동일한 객체를 참조하므로, b가 데이터를 수정하면 a가 가지고 있는 내용도 같이 변경 된다.

댓글남기기