작성중입니다....
기본 자료형 var
nullable,
구조체,
stack vs. heap
value type vs. reference type
제어문
연산자 **
기본 자료형
value type vs. reference type
위의 그림과 같이 CTS에서 변수는 참조형식, 값형식으로 나뉜다.
값/참조 형식의 차이점을 이해하려면 반드시 스택(Stack)과 힙(Heap)을 이해할 필요가 있다.
stack 윈도우 프로그램은 기본적으로 하나의 스레드를 갖는다. 그리고 개별스레드마다 전용으로 사용할 수 있는 저장소가 메모리에 할당되는데 그 영역을 **++스택++**이라고 한다. 스택은 기본적으로 1MB공간만 스레드에 할당한다. 1MB라는 용량은 일반적인 메서드 호출 상황에서 스택 오버플로를 발생시키기에는 여유가 있는 공간이다. 하지만 재귀 호출을 사용하는 프로그램에는 문제가 발생할 수 있다.
heap **++힙++**은 프로그램에서 필요에 의해 메모리를 사용하겠다고 요청했을 때 사용할 수 있는 저장소다. 힙의 경우 별도로 명시하지 않는 한 CLR에서는 관리 힙(managed heap)을 가리킨다. 관리 힙이란 CLR의 가비지 수집기(GC:Garbage Collector)가 할당/해제를 관리하기 때문에 붙여진 이릅이다. C#에서 new로 할당되는 모든 참조형 객체는 힙에 할당된다. 메모리 해제는 GC가 자동으로 해준다.
var
nullable
구조체
제어문
연산자
참조형 객체 :
heap의 경우 별도로 명시하지 않는 한 CLR에서는 managed heap을 가리킨다. C#에서 new로 할당되는 모든 참조형 객체는 힙에 할당된다.
박싱 / 언박싱
박싱 : 값 형식 -> 참조 형식 언박싱 : 참조 형식 -> 값 형식
static void Main(string[] args)
{
int a = 5;
int b = 6;
object obj = a; // 박싱 : 값 형식인 int를 참조 형식인 object에 대입
int c = GetMaxValue(a, b);// 언박싱
}
박싱이 빈번할 수록 GC는 바빠지고 프로그램의 수행 성능은 그만큼 떨어진다. 따라서 박싱을 과다하게 발생할 수 있는 코드는 최대한 줄이는 것을 권장한다.
컬렉션
프로그래밍하다 보면 정해지지 않은 크기의 배열을 다뤄야 할 필요가 있는데, 이 같은 기능을 편리하게 구현한 것을 컬렉션(collection)이라 한다. BCL에서는 System.Collections 네임스페이스 하위에 이와 관련된 타입을 묶어서 제공하고 있다.
모든 타입의 조상 : System.Object
클래스를 정의할 때 부모 클래스를 명시하지 않는다면 C#컴파일러는
닷넷 프레임워크의 BLC 중에서도 박싱으로 managed heap : CLR의 Garbage Collector가 할당/해제를 관리하기 때문에 붙여진 이름
System.Collections.ArrayList ArrayList는 object 타입 및 그와 형변환할 수 있는 모든 타입을 인자로 받아 컬렉션에 추가/삭제/변경/조회할 수 있는 기능을 구현한 타입이다. 간단하게 생각해서 크기가 자유롭게 변할 수 있는 배열이라고 보면 된다.