c#(3)
-
C# IEnumerator, IEnumerable
IEnumerator - 열거자 인터페이스 정의 IEnumerator 는 제네릭이 아닌 모든 열거자의 기본 인터페이스이다. 사용 현재 데이터를 반환하는 Current를 반환하는 함수를 구현한다. 현재 참조하고 있는 노드의 다음노드를 가르키고, 다음 노드가 존재하는지를 반환하는 함수를 구현한다. 컬렉션의 첫번째 요소를 가르키도록 하는 리셋 함수를 구현한다. IEnumerable 정의 제네릭이 아닌 컬렉션에서 단순하게 반복할 수 있도록 지원하는 열거자를 노출하도록 하는 인터페이스이다. 사용 IEnumerator 를 반환하는 GetEnumerator() 함수를 구현한다. 예시 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ..
2021.11.16 -
C# Generic Basic
Generics 정의 타입을 디자인 할 때가 아닌 클라이언트가 사용할 때 지정해주는 기술이다. 사용 메소드, 클래스 등에 유연성(재사용성)을 제공함과 동시에, 컴파일 타임에서의 타입 안정성을 제공한다. Object의 사용을 줄여 Boxing / Unboxing 으로 일어나는 자원의 소모를 막을 수 있다. 예시 오른쪽 코드를 보면, MyIntLinkedList 타입의 연결 리스트는 AddFirst에서 int 만을 받아와 노드를 생성하기 때문에 여러 타입을 제공할 수가 없다. 그러나 MyLinkedList 타입의 연결 리스트는 Generic을 사용했기 때문에 클라이언트가 원하는 타입으로 노드를 생성할 수 있고, 다른 타입의 데이터를 파라미터로 전달하려 하면 컴파일 타임에서 에러가 나게 된다.
2021.11.11 -
(C#) Virtual / Abstract / Interface
Virtual 과 Abstract는 거의 비슷하다. virtual method는 선택적으로 파생 클래스에서 override 할 수 있습니다. abstract method는 무조건적으로 파생 클래스에서 메서드를 override 해야 합니다. overriding이 선택적이기 때문에 virtual method는 무조건적으로 본문을 선언해야 하고, 무조건적으로 override하기 때문에 abstract method는 본문을 선언할 수 없습니다. 또한 abstract class는 인스턴스화할 수 없습니다. (어찌보면 메소드의 본문을 선언할 수 없기에 당연한 것이다.) Interface는 Abstract와 본문을 선언하지 못한다는 점에서 유사합니다. 하지만 멤버필드를 사용할 수 없습니다.(프로퍼티는 사용가능하다.)..
2021.05.31