... | ... | @@ -6,19 +6,14 @@ |
|
|
## 클래스
|
|
|
개발자가 직접 속성과 메서드로 구성된 타입을 정의한 것이다. 클래스로 정의된 타입은 모두 참조형으로 분류되므로 값이 힙에 저장된다.
|
|
|
|
|
|
## 객체와 인스턴스
|
|
|
클래스 타입의 변수를 선언했을 때 **객체**라 부르고, new 키워드를 써서 그 객체가 실제 메모리에 할당됐을때 **인스턴스**라고 한다.
|
|
|
|
|
|
### 필드
|
|
|
클래스의 속성을 변수로 정의한 것이다. 기본형 타입이나 사용자 정의형 타입으로 정의할 수 있다. 멤버 변수라고도 한다.
|
|
|
클래스의 속성을 변수로 정의한 것이다. 기본형 타입이나 사용자 정의형 타입으로 정의할 수 있다.
|
|
|
|
|
|
### 메서드
|
|
|
클래스의 행위를 함수로 정의한 것이다. 서브루틴, 프로시저라고도 한다. 메서드를 쓰는 이유는 다음과 같다.
|
|
|
1. 중복 코드 제거 : 중복된 코드는 메서드로 묶어서 편하게 이용할 수 있다.
|
|
|
2. 코드 추상화 : 메서드의 내부를 몰라도 입출력 인자의 용도만 안다면 사용 가능하다.
|
|
|
클래스의 행위를 함수로 정의한 것이다.
|
|
|
|
|
|
### 생성자
|
|
|
객체가 생성되는 시점에 자동으로 호촐되는 메서드. 반환타입을 명시하지 않는 점을 제외하면 일반 메서드를 정의하는 방법을 따른다.
|
|
|
객체가 생성되는 시점에 자동으로 호출되는 메서드. 반환타입을 명시하지 않는 점을 제외하면 일반 메서드를 정의하는 방법을 따른다.
|
|
|
|
|
|
### 소멸자
|
|
|
객체가 제거되는 시점에 자동으로 호출되는 메서드. C#은 C++와 달리 delete라는 예약어가 없고, GC가 호출돼야 소멸자가 호출된다. GC가 정확히 언제 호출되는지 알 수 없기 때문에 소멸자의 사용은 권장되지 않는다. 대신 IDisposable을 구현하여 Dispose()를 사용하는 방법이 권장된다.
|
... | ... | @@ -1325,55 +1320,3 @@ namespace ConsoleApplication1 |
|
|
}
|
|
|
}
|
|
|
``` |
|
|
|
|
|
#### 인덱서
|
|
|
|
|
|
클래스 내의 배열로 된 멤버 변수에 바로 접근할 수 있게 해주는 것이다. 인덱서를 만들면 대괄호 연산자 사용을 인스턴스에 할 수 있다. 클래스가 직관적으로 배열처럼 다뤄질 수 있을 때 사용하기 쉽도록 제공되는 구문이다.
|
|
|
사용 예시는 다음과 같다.
|
|
|
```c#
|
|
|
class IndexerEx
|
|
|
{
|
|
|
private const int MAX = 10;
|
|
|
private string name;
|
|
|
|
|
|
private int[] arr = new int[MAX];
|
|
|
|
|
|
public int this[int index] //int형으로 인덱스 지정
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
if (index < 0 || index >= MAX)
|
|
|
{
|
|
|
throw new IndexOutOfRangeException();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return arr[index]; //범위에 벗어나지 않으면 arr[] 배열에서 get
|
|
|
}
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
if (index < 0 || index >= MAX)
|
|
|
{
|
|
|
throw new IndexOutOfRangeException();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
arr[index] = value; //범위에 벗어나지 않으면 arr[] 배열에 set
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class Program
|
|
|
{
|
|
|
public static void Main()
|
|
|
{
|
|
|
IndexerEx ex = new IndexerEx();
|
|
|
|
|
|
ex[1] = 1024; //인덱서 set 사용
|
|
|
|
|
|
int i = ex[1]; //인덱서 get 사용
|
|
|
}
|
|
|
}
|
|
|
``` |