반응형

언어 자료구조 알고리즘 1251

[python] 10. 파이썬을 잘 사용하기 위한 첫 걸음, 리스트를 소개합니다.

10. 파이썬을 잘 사용하기 위한 첫 걸음, 리스트를 소개합니다. 안녕하세요. 언제나 휴일, 언휴예요. 우리가 어떠한 프로그래밍 언어를 익힌다는 것은 학문적으로 지식을 쌓는다는 것보다는 실용적으로 얼마나 유용하게 사용하는가에 초점을 둘 필요가 있다고 생각합니다. 물론, 프로그래밍 언어는 프로그래머의 가장 기본적인 부분이라 깊이가 깊어지면 다양한 활동에서 이득을 갖을 수 있어요. 그럼에도 불구하고 프로그래밍 언어를 학문적으로만 접근하는 것보다는 실용적으로 접근하는 것이 학문적인 지식을 쌓는데도 유리하다고 생각해요. 이러한 사견에 이의를 제기하실 분도 있을테고 맞장구 쳐 주실 분들도 계시겠지만 이를 논하는 것은 온라인 카페나 다른 BBS로 넘기고 저는 능글맞게 본론으로 넘어갈게요. 프로그래밍을 하다 보면 같..

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

12.2 리플렉션 리플렉션은 프로그램 런타임에 형식의 멤버를 반영하는 기술입니다. 이 기술은 명시적으로 라이브러리를 로딩하여 사용할 때 이용합니다. 리플렉션을 이용하여 명시적 라이브러리 로딩하여 사용하는 것을 보여주기 위해 다음의 클래스를 정의한 라이브러리를 작성합시다. 솔루션 이름을 리플렉션으로 정하고 ManLib 이름의 클래스 라이브러리 프로젝트를 추가하세요. [그림 12.2] 솔루션 생성 그리고 ManLib에 기본으로 제공하는 Class1.cs 파일명을 Man.cs로 변경하세요. Microsoft Visual Studio.NET은 자동으로 클래스 이름을 Man으로 변경합니다. 테스트를 Man 형식을 정의합시다. using System; namespace ManLib { public class Man..

[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..

반응형