ch3. 데이터 유지
1. 다양한 형태의 데이터

C#은 다양한 종류의 데이터 유형을 제공합니다.
데이터 유형은 기본 데이터 유형과 복합 데이터 유형으로 나뉩니다.
또한 값 유형과 참조 유형으로 나눌 수 있습니다.

2. 변수
변수(코드): 값을 대입하여 변경할 수 있는 요소
변수(메모리): 데이터를 담고 있는 일정한 크기(데이터 형식에 따라 다름)의 공간
-> C# 코드를 작성할 때 메모리에 대해 생각해야 합니다.
변수 선언

변수 선언: 변수에 대한 메모리 공간을 예약하도록 컴파일러에 지시합니다.
컴파일러는 int 유형에 대한 메모리 공간을 할당하고 이 공간을 x에서 사용할 수 있도록 준비합니다.
대입 연산자를 통해 변수 x에 데이터를 입력할 수 있습니다.
메모리 공간에 100개의 데이터 쓰기

정수 x = 100;
선언과 초기화를 동시에 할 수 있음
정수 a, b, c; // 같은 타입의 변수는 동시에 선언 가능
정수 x = 30, y = 40. x = 50; // 같은 타입의 변수는 동시에 선언 및 초기화 가능
# 초기화 이유
초기화: 첫 번째 데이터를 변수에 할당
초기화가 되지 않으면 ‘가비지 데이터’가 변수에 들어가고 소프트웨어가 이상하게 동작합니다.
3. 값 및 참조 유형
값 유형: 변수가 값을 보유하는 데이터 유형입니다.
참조 유형: 변수가 값 대신 값에 대한 위치(참조)를 보유하는 데이터 유형입니다.
3-1 스택 및 값 형식
{
정수 a = 100;
정수 b = 200;
정수 c = 300;
}
값 유형은 스택에 순차적으로 로드됩니다.
코드 블록이 닫히면( } ) 스택의 데이터가 나중에 로드된 순서대로 지워집니다.
값 유형 변수는 스택에 저장되며 }가 발생하면 메모리에서 제거됩니다.
스택은 자동으로 데이터를 제거합니다.

3-2 힙과 참조 유형
힙은 CLR의 가비지 수집기로 힙에서 사용되지 않는 개체를 수집합니다.
코드 블록의 끝과 관계없이 데이터를 유지할 수 있습니다.
데이터가 사용되지 않고 가비지가 되면 가비지 수집기에 의해 메모리에서 제거됩니다.
참조 유형의 변수는 힙과 스택을 모두 사용합니다.
힙 영역에 데이터를 저장하고 스택 영역에는 데이터가 저장되는 힙 메모리의 주소를 저장합니다.
{
개체 a = 10;
개체 b = 20;
}

CLR은 실제 값을 힙에 저장하고 a와 b가 저장된 힙의 주소만 스택에 저장합니다.
코드 블록의 끝에서 }를 만나면 스택도 사라지지만
힙에 여전히 값이 남아 있습니다.
이 데이터를 사용하지 않으면 CLR의 가비지 수집기가 수집합니다.
스택: 변수의 수명 주기가 끝나면 자동으로 데이터 삭제
힙: 가비지 컬렉터는 데이터에 대한 참조가 더 이상 없을 때 데이터를 삭제합니다.
# 참조: 이것은 C#입니다.


