... | ... | @@ -1008,5 +1008,79 @@ Array.Sort(PersonArray, New AgeCompare()); //나이를 기준으로 내림차순 |
|
|
##### IEnumerable 인터페이스
|
|
|
자바의 Iterator와 비슷하다.
|
|
|
IEnumerable 인터페이스를 구현하고 있는 클래스는 열거자를 통해 get(), MoveNext() 등의 메서드를 쓸 수 있다.
|
|
|
>foreach의 in 다음에 오는 객체가 IEnumerable 인터페이스를 구현하고 있다면 요소 열거가 가능하다.
|
|
|
>foreach의 in 다음에 오는 객체가 IEnumerable 인터페이스를 구현하고 있다면 foreach 사용이 가능하다.
|
|
|
|
|
|
##### 느슨한 결합
|
|
|
```c#
|
|
|
interface IPower
|
|
|
{
|
|
|
void TurnOn();
|
|
|
}
|
|
|
|
|
|
class Monitor : IPower
|
|
|
{
|
|
|
public void TurnOn()
|
|
|
{
|
|
|
Console.WriteLine("Monitor: TurnOn");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class Computer : IPower
|
|
|
{
|
|
|
public void TurnOn()
|
|
|
{
|
|
|
Console.WriteLine("Computer: TurnOn");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class Switch
|
|
|
{
|
|
|
public void PowerOn(IPower machine) //매개변수를 인터페이스로 받으면 클래스를 매개변수로 받는 것보다 느슨한 결합을 달성가능하다.
|
|
|
{
|
|
|
machine.TurnOn();
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
#### 구조체
|
|
|
사용자 정의 형식지만 값 형식을 가진다. 클래스와 차이는 다음과 같다.
|
|
|
1. 인스턴스 생성을 new로 해도 되고, 안 해도 된다. (new로 하면 구조체 내 모든 속성값 0으로 할당.)
|
|
|
2. 기본 생성자는 명시적으로 정의할 수 없다.
|
|
|
3. 매개변수를 갖는 생성자를 정의해도 기본 생성자가 C# 컴파일러에 의해 자동으로 포함된다.
|
|
|
4. 매개변수를 받는 생성자의 경우, 반드시 해당 코드 내에서 구조체의 모든 필드에 값을 할당해야 한다.
|
|
|
|
|
|
>값 형식에 속하는 모든 타입은 기본적으로 0으로 초기화된다. 하지만 컴파일러는 개발자가 직접 초기화하지 않은 상태의 변수를 사용하는 것은 오류라고 판단하기 때문에 명시적으로 초기화를 해줘야한다.
|
|
|
|
|
|
```c#
|
|
|
struct Vector
|
|
|
{
|
|
|
int x;
|
|
|
int y;
|
|
|
|
|
|
public Vector() //매개변수 없는 생성자 정의 불가. (에러)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
public Vector(int x) //모든 필드에 값을 할당해야 한다.(에러)
|
|
|
{
|
|
|
this.x = x;
|
|
|
}
|
|
|
|
|
|
public Vector(int x, int y) //매개변수 있는 생성자는 정의 가능.
|
|
|
{
|
|
|
this.x = x;
|
|
|
this.y = y;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class Program
|
|
|
{
|
|
|
Vector vec = new Vector(); //속성값 0으로 초기화.
|
|
|
Vector vec2; //이것도 선언 가능.
|
|
|
}
|
|
|
```
|
|
|
|
|
|
#### 깊은 복사와 얕은 복사
|
|
|
깊은 복사와 얕은 복사의 차이는 대입할 때 나타난다. 깊은 복사는 값 타입의 경우에 메모리가 똑같이 복사되서 값의 변경이 있더라도 서로 영향을 미치지 않는다. 반면 얕은 복사는 참조 타입의 경우라 참조 주소만을 복사한다. 그래서 값의 변경이 일어나면 다른 곳에서도 원치 않는 값의 변경이 있을 수 있다.
|
|
|
|
|
|
깊은 복사는 메모리를 복사하기 때문에 그런 경우를 막을 수 있지만, 크기가 큰 메모리 같은 경우엔 그 크기 단위로 복사하기 때문에 부담을 줄 수 있다.
|
|
|
단면 |