|
|
## 작성중입니다....
|
|
|
|
|
|
|
|
|
|
|
|
기본 자료형
|
|
|
var
|
|
|
|
|
|
nullable,
|
|
|
|
|
|
구조체,
|
|
|
|
|
|
stack vs. heap
|
|
|
|
|
|
value type vs. reference type
|
|
|
|
|
|
제어문
|
|
|
|
|
|
연산자
|
|
|
**
|
|
|
|
|
|
#### **기본 자료형**
|
|
|
* **Value Type**
|
|
|

|
|
|
<br>
|
|
|
|
|
|
* **C#과 닷넷 프레임워크에서 제공되는 타입의 대응관계**
|
|
|

|
|
|
<br>
|
|
|
|
|
|
* **기본 자료형의 default value**
|
|
|

|
|
|
<br>
|
|
|
|
|
|
#### **value type vs. reference type**
|
|
|
|
|
|
* **Value types and reference types in the CTS**
|
|
|

|
|
|
<br>
|
|
|
|
|
|
위의 그림과 같이 CTS에서 변수는 참조형식, 값형식으로 나뉜다.
|
|
|
> 값/참조 형식의 차이점을 이해하려면 반드시 스택(Stack)과 힙(Heap)을 이해할 필요가 있다.
|
|
|
>
|
|
|
> **stack**
|
|
|
> 윈도우 프로그램은 기본적으로 하나의 스레드를 갖는다. 그리고 개별스레드마다 전용으로 사용할 수 있는 저장소가 메모리에 할당되는데 그 영역을 **++스택++**이라고 한다. 스택은 기본적으로 1MB공간만 스레드에 할당한다. 1MB라는 용량은 일반적인 메서드 호출 상황에서 스택 오버플로를 발생시키기에는 여유가 있는 공간이다. 하지만 재귀 호출을 사용하는 프로그램에는 문제가 발생할 수 있다.
|
|
|
위의 그림과 같이 CTS에서 변수는 참조형식, 값형식으로 나뉜다. 값형식에 속하는 것으로는 sbyte, byte, char, short, ushort, int, uint, long, ulong, float, double, decimal, bool이, 참조형식에 속하는 것으로는 string, 배열, 클래스, object이 있다.
|
|
|
> 값/참조 형식의 차이점을 이해하려면 반드시 스택(Stack)과 힙(Heap)을 이해할 필요가 있다.
|
|
|
>
|
|
|
> **stack**
|
|
|
> 윈도우 프로그램은 기본적으로 하나의 스레드를 갖는다. 그리고 개별스레드마다 전용으로 사용할 수 있는 저장소가 메모리에 할당되는데 그 영역을 **++스택++**이라고 한다. 스택은 기본적으로 1MB공간만 스레드에 할당한다. 1MB라는 용량은 일반적인 메서드 호출 상황에서 스택 오버플로를 발생시키기에는 여유가 있는 공간이다. 하지만 재귀 호출을 사용하는 프로그램에는 문제가 발생할 수 있다.
|
|
|
|
|
|
> **heap**
|
|
|
> **++힙++**은 프로그램에서 필요에 의해 메모리를 사용하겠다고 요청했을 때 사용할 수 있는 저장소다. 힙의 경우 별도로 명시하지 않는 한 CLR에서는 관리 힙(managed heap)을 가리킨다. 관리 힙이란 CLR의 가비지 수집기(GC:Garbage Collector)가 할당/해제를 관리하기 때문에 붙여진 이릅이다. C#에서 new로 할당되는 모든 참조형 객체는 힙에 할당된다. 메모리 해제는 GC가 자동으로 해준다.
|
|
|
> **heap**
|
|
|
> **++힙++**은 프로그램에서 필요에 의해 메모리를 사용하겠다고 요청했을 때 사용할 수 있는 저장소다. 힙의 경우 별도로 명시하지 않는 한 CLR에서는 관리 힙(managed heap)을 가리킨다. 관리 힙이란 CLR의 가비지 수집기(GC:Garbage Collector)가 할당/해제를 관리하기 때문에 붙여진 이릅이다. C#에서 new로 할당되는 모든 참조형 객체는 힙에 할당된다. 메모리 해제는 GC가 자동으로 해준다.
|
|
|
|
|
|
<br>
|
|
|
* **스택에 저장된 값 형식의 데이터**
|
|
|
<img src="secondImage/variable.png" width="350"> <img src="secondImage/variable-2.png" width="200">
|
|
|
<br>
|
|
|
|
|
|
* **데이터를 가리키는 참조형 변수를 위해 할당된 메모리**
|
|
|
<img src="secondImage/variable-4.png" width="350"> <img src="secondImage/variable-5.png" width="350">
|
|
|
<br>
|
|
|
|
|
|
* **값 형식과 참조 형식의 차이점**
|
|
|
<img src="secondImage/variable-6.png" width="500">
|
|
|
|
|
|
#### **var**
|
|
|
#### **nullable**
|
|
|
#### **구조체**
|
|
|
|
|
|
#### **제어문**
|
|
|
#### **연산자**
|
|
|
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
|
|
|
|
|
|
참조형 객체 :
|
|
|
|
|
|
|
|
|
heap의 경우 별도로 명시하지 않는 한 CLR에서는 managed heap을 가리킨다. C#에서 new로 할당되는 모든 참조형 객체는 힙에 할당된다.
|
|
|
|
|
|
#### 박싱 / 언박싱
|
|
|
|
... | ... | @@ -94,14 +57,78 @@ static void Main(string[] args) |
|
|
```
|
|
|
박싱이 빈번할 수록 GC는 바빠지고 프로그램의 수행 성능은 그만큼 떨어진다. 따라서 박싱을 과다하게 발생할 수 있는 코드는 최대한 줄이는 것을 권장한다.
|
|
|
|
|
|
#### 컬렉션
|
|
|
프로그래밍하다 보면 정해지지 않은 크기의 배열을 다뤄야 할 필요가 있는데, 이 같은 기능을 편리하게 구현한 것을 컬렉션(collection)이라 한다. BCL에서는 System.Collections 네임스페이스 하위에 이와 관련된 타입을 묶어서 제공하고 있다.
|
|
|
#### **var**
|
|
|
C#3.0 컴파일러부터는 타입 추론(type inference)기능이 추가되면서 메서드의 지역 변수 선언을 타입에 관계없이 var 예약어로 쓸 수 있게 됐다.
|
|
|
``` cs
|
|
|
static void Main(string[] args)
|
|
|
{
|
|
|
int i = 5;
|
|
|
var j = 6;
|
|
|
|
|
|
List<int> number1 = new List<int>(new int[] {1, 2, 3, 4, 5});
|
|
|
List<int> number2 = new List<int>(new int[] {6, 7, 8, 9, 10});
|
|
|
|
|
|
Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>();
|
|
|
|
|
|
foreach (KeyValuePair<string, List<int>> elem in dict)
|
|
|
{
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
foreach문에서 컬렉션의 요소 타입을 지정하는 것이 복잡하다. 이때 var 예약어를 이용하면 코드가 더 간결해진다.
|
|
|
``` cs
|
|
|
foreach (var elem in dict)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
```
|
|
|
|
|
|
#### **nullable**
|
|
|
bool 타입은 true/false값만을 가질 수 있는데, Nullable<T>타입은 일반적인 값 형식에 대해 null표현이 가능하게 하는 역할을 한다.
|
|
|
|
|
|
#### **구조체**
|
|
|
값 형식에도 class처럼 사용자 정의 형식을 둔 것이 구조체이다.
|
|
|
|
|
|
1. 인스턴스 생성을 new로 해도 되고, 안 해도 된다.
|
|
|
2. 기본 생성자는 명시적으로 정의할 수 없다.
|
|
|
3. 매개변수를 갖는 생성자를 정의해도 기본 생성자가 C#컴파일러에 의해 자동으로 포함된다(클래스의경우에는 포함되지 않는다).
|
|
|
4. 매개변수를 받는 생성자의 경우, 반드시 해당 코드 내에서 구조체의 모든 필드에 값을 할당해야 한다.
|
|
|
|
|
|

|
|
|
|
|
|
#### 모든 타입의 조상 : System.Object
|
|
|
클래스를 정의할 때 부모 클래스를 명시하지 않는다면 C#컴파일러는
|
|
|
#### **제어문**
|
|
|

|
|
|
* **foreach문**
|
|
|
in 다음에 오는 배열을 처음부터 끝까지순회하면서 개별 요소를 변수명에 넣어 반복문 구문 내에서 해당 변수를 사용할 수 있게 해준다.
|
|
|
``` cs
|
|
|
foreach (표현식요소의_자료형 변수명 in 표현식)
|
|
|
구문;
|
|
|
```
|
|
|
|
|
|
#### **연산자**
|
|
|
1. 수식 연산자
|
|
|

|
|
|
|
|
|
닷넷 프레임워크의 BLC 중에서도 박싱으로
|
|
|
managed heap : CLR의 Garbage Collector가 할당/해제를 관리하기 때문에 붙여진 이름
|
|
|
2. 증감 연산자
|
|
|

|
|
|
|
|
|
System.Collections.ArrayList
|
|
|
ArrayList는 object 타입 및 그와 형변환할 수 있는 모든 타입을 인자로 받아 컬렉션에 추가/삭제/변경/조회할 수 있는 기능을 구현한 타입이다. 간단하게 생각해서 크기가 자유롭게 변할 수 있는 배열이라고 보면 된다. |
|
|
\ No newline at end of file |
|
|
3. 관계 연산자
|
|
|

|
|
|
|
|
|
4. 할당 연산자
|
|
|

|
|
|
|
|
|
5. 논리 연산자
|
|
|

|
|
|
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
|
|
<br> |
|
|
\ No newline at end of file |