반응형

전체 글 2934

[C#] 12. 직렬화와 리플렉션 - 사용자 지정 직렬화

12.1.2 사용자 지정 직렬화 C#에서는 직렬화할 때 메터데이터 부분을 개발자가 정한 이름으로 직렬화할 수 있게 사용자 지정 직렬화를 제공합니다. 사용자 지정 직렬화하려면 ISerializable 인터페이스를 기반으로 정의해야 합니다. [Serializable] class Man:ISerializable 그리고 ISerializable에 기능 약속한 GetObjectData 메서드를 정의합니다. public void GetObjectData(SerializationInfo info, StreamingContext context) { 직렬화할 대상을 SerializationInfo 개체의 AddValue 메서드를 이용하여 원하는 이름으로 값을 추가합니다. info.AddValue("이름", Name); ..

[C#] 12. 직렬화와 리플렉션 - 선별적 직렬화

12.1.1 선별적 직렬화 C#에서는 형식 내부의 멤버 필드 중에서 직렬화와 역직렬화에 포함하지 않게 선별적 직렬화를 제공합니다. 선별적 직렬화는 멤버 필드에만 적용할 수 있는데 직렬화 대상에서 빼고 싶은 멤버 위에 NonSerialized 어튜리뷰트를 지정합니다. 예를 들어 사용자가 로그인하여 게임을 진행할 때 공부한 시간이 5이면 아이큐를 증가한다고 가정합시다. 만약 사용자가 로그아웃하면 공부한 시간은 사라지고 다시 로그인 하면 다시 0부터 시작하게 합시다. 직렬화와 역직렬화를 이용한다면 공부한 시간을 직렬화 대상에서 배제합니다. [Serializable] class Unit { [NonSerialized] int scnt;//공부한 횟수 internal string Name { get; privat..

[C#] 12. 직렬화 및 리플렉션 - 직렬화

12. 직렬화 및 리플렉션 직렬화란 프로세스의 개체 정보를 선형적(연속적인 선의 형태)으로 다른 매체에 기록 혹은 전송하는 것을 말합니다. 그리고 다른 매체의 정보를 읽어나 수신하여 프로세스의 개체를 만드는 것을 역직렬화라 부릅니다. 이번 장에서는 C#에서 제공하는 직렬화와 역직렬화를 사용하여 파일 입출력하는 예를 살펴볼게요. 그리고 리플렉션은 형식 정보를 이용하여 개체를 생성하거나 메서드 등을 사용하는 것을 말합니다. 특히 프로그램 동작 중에 명시적으로 라이브러리를 로딩하여 사용할 때 리플렉션을 사용합니다. 12.1 직렬화 C#에서는 ISerializable 어튜리뷰트를 제공하고 있으며 이를 사용하면 별다른 작업없이 직렬화할 수 있습니다. 직렬화하려면 어느 개체 정보를 직렬화할 것인지 어느 매체에 직렬..

[C#] 11. 예외 처리 - 파생 관계의 예외 잡기

11.3 파생 관계의 예외 잡기 C#의 예외 처리구문에서는 하나의 try 블록 뒤에 여러 개의 catch 블록을 지정할 수 있습니다. 그리고 catch 블록에서는 앞에 배치한 곳에서 예외를 받아서 처리하면 뒤에 있는 catch 블록은 수행하지 않습니다. 예를 들어 try 블록 뒤에 Exception 개체를 받아 처리하는 catch 블록과 SystemException 개체를 받아 처리하는 catch블록을 지정했다고 가정합시다. 기반 형식 변수로 파생 형식 개체를 참조할 수 있기 때문에 어떠한 예외가 발생해도 앞에 배치한 catch 블록에서 예외를 받아 처리하고 뒤에 배치한 catch 블록은 동작하지 않습니다. 따라서 여러 개의 catch 블록을 배치할 때 파생 형식을 처리하는 catch 블록부터 배치해야 ..

[C#] 11. 예외 처리 - 예외 클래스

11.2 예외 클래스 C#에서 throw 뒤에 올 수 있는 형식은 반드시 Exceptaion 형식 개체이거나 Exceptaion 형식을 기반으로 파생한 형식 개체여야 합니다. 이와 같은 문법적 제약은 개발자가 프로그래밍하기 어렵게 만들기 보다는 오히려 논리적 버그를 잡는데 도움을 줍니다. Exception 클래스에는 예외 발생 이유를 나타내는 메시지와 예외 발생 소스, 예외 발생한 위치의 코드를 수행하기까지의 스택 역추적 정보를 제공합니다. 따라서 개발자가 Exception 클래스를 기반으로 예외 클래스를 정의하면 기반 형식인 Exception 클래스에서 제공하는 정보를 별도의 구현없이 제공할 수 있습니다. static void Main(string[] args) { try { Demo demo = ne..

[C#] 11. 예외 처리 - 예외처리 구문

11. 예외 처리 이번에는 C#언어의 예외 처리를 알아봅시다. 프로그램이 잘못 동작하는 이유를 살펴보면 사용자가 잘못 사용하거나 개발자가 논리적 버그가 있는 코드를 작성하거나 프로그램이 동작할 수 있는 조건을 만족하지 못하는 등의 이유가 있습니다. 보통 사용자가 잘못 사용하는 것을 에러라고 말하며 개발자가 논리 전개를 잘못한 것을 버그, 프로그램이 동작할 수 없는 조건일 때 예외라고 말합니다. C#의 예외 처리는 프로그램이 더 이상 진행할 수 없는 상태에 도달했을 때 처리하는 방법입니다. 그럼에도 불구하고 C#의 예외 처리를 이용하면 사용자의 실수를 대처하기 위한 방법이나 개발자의 논리적 버그를 확인하기 위한 목적으로도 사용합니다. 11.1 예외 처리 구문 C#의 예외 처리 구문은 try-catch-fi..

[디딤돌 자료구조와 알고리즘] 5.2 연결리스트 - 5.2.3 연결리스트 테스트

5.2.3 연결리스트 테스트 연결리스트를 사용하는 방법은 순차적으로 보관하거나 원하는 위치를 찾아 보관하는 방법이 대표적입니다. 동적 배열에서는 이 외에도 인덱스를 사용하는 방법이 있었지만 연결리스트를 사용할 때는 이 방법은 사용하지 않습니다. 따라서 테스트 코드는 크게 순차 보관하는 시뮬레이션과 원하는 순서로 보관하는 예로 구성할게요. int main() { Simul_Seq(); Simul_Order(); return 0; } 먼저 순차적으로 보관하는 테스트 코드를 작성합시다. void Simul_Seq() { 먼저 연결리스트를 동적으로 생성합니다. LinkedList *linkedlist = New_LinkedList(); 그리고 도서 개체를 생성하여 연결리스트에 순차 보관합니다. 순차 보관할 때는..

[디딤돌 자료구조와 알고리즘] 5.2 연결리스트 - 5.2.2 연결리스트 구현

5.2.2 연결리스트 구현 연결리스트를 동적으로 생성하는 함수를 작성합시다. LinkedList *New_LinkedList() { LinkedList *linkedlist = 0; 먼저 LinkedList 형식 크기의 메모리를 할당합니다. linkedlist = (LinkedList *)malloc(sizeof(LinkedList)); 그리고 head와 tail에 더미 노드를 생성합니다. 노드를 생성하는 함수는 별도로 작성합시다. linkedlist->head = New_Node(0); linkedlist->tail = New_Node(0); head의 next링크를 tail을 가리키게 하고 tail의 prev 링크를 head를 가르키게 합니다. linkedlist->head->next = linked..

[디딤돌 자료구조와 알고리즘] 5.2 연결리스트 - 5.2.1 연결리스트 설계

5.2 연결리스트 연결리스트는 노드의 선형 집합입니다. 노드란 데이터와 링크의 조합으로 하나의 데이터를 보관하는 작은 저장소입니다. 그리고 링크는 노드의 위치 정보입니다. [그림 5.1] 연결리스트 연결리스트는 노드에 링크가 하나만 있는 단일(단순) 연결리스트와 링크가 두 개 있는 이중 연결리스트로 구분할 수 있습니다. 이 책에서는 노드에 이전 노드의 위치 정보를 가르키는 링크와 다음 노드의 위치 정보를 가르키는 링크를 갖고 있는 이중 연결리스트를 만들고 사용하는 방법을 소개할 것입니다. 특히 연결리스트를 생성할 때 연결리스트의 맨 앞과 맨 뒤에 더미 노드를 생성하여 자료를 보관하는 노드들을 이들 사이에 배치할게요. 5.2.1 연결리스트 설계 동적 배열처럼 연결리스트도 동적으로 생성한 개체는 형식에 관계..

[디딤돌 자료구조와 알고리즘] 5.1 배열 - 5.1.3 동적 배열 테스트

5.1.3 동적 배열 테스트 앞에서 만든 동적 배열이 잘 동작하는지 확인하는 시뮬레이션 코드를 작성합시다. 여기에서는 순차적으로 자료를 보관하는 예와 특정 키순으로 보관하는 예, 인덱스를 사용하는 예를 들게요. int main() { Simul_Seq(); Simul_Order(); Simul_Index(); return 0; } 먼저 순차적으로 동적 배열을 사용하는 시뮬레이션 코드를 작성합시다. void Simul_Seq() { 먼저 동적 배열을 생성합니다. Array *arr = New_Array(); 그리고 도서 개체를 생성하여 순차적으로 동적 배열에 보관합니다. Array_PushBack(arr,New_Book("C언어","홍길동",10)); Array_PushBack(arr,New_Book("C..

반응형