반응형

C# 소스 코드 57

[C# 실습] 반도체 장비 관리 프로그램 - 1. 단일체 패턴 표현

[C# 실습] 반도체 장비 관리 프로그램 1. 생성자의 보호 수준을 private로 지정 2. 정적 멤버로 단일체를 참조할 변수 선언 3.정적 생성자에서 단일체 생성 4.다른 곳에서 단일체에 접근할 수 있게 속성 제공 EWorld.cs using System; namespace 반도체_월드 { class EWorld { #region 단일체 패턴 //1. 생성자의 보호 수준을 private로 지정 //멤버의 디폴트 가시성은 private EWorld() { Console.WriteLine("EWorld 생성자"); } //2. 정적 멤버로 단일체를 참조할 변수 선언 static EWorld eworld = null; //3.정적 생성자에서 단일체 생성 static EWorld() { Console.Wri..

[C# OOP 실습] 캠퍼스 생활

[C# OOP 실습] 캠퍼스 생활 프로젝트 명: 캠퍼스 생활 캠퍼스 생활은 콘솔 기반의 응용 프로그램이다. 프로그램은 초기화, 사용자 명령에 따른 동작 순으로 수행된다. 초기화에서는 캠퍼스 생성과 장소 생성, 학생 생성이 진행된다. 장소 생성에서는 강의실과 도서관, 기숙사가 생성된다. 학생 생성에서는 사용자가 원하는 수만큼 학생들이 생성된다. 학생 종류에는 도전적인 학생, 보수적인 학생, 수동적인 학생이 있으며 사용자가 원하는 유형을 선택한다. 그리고 학생은 사용자에 의해 이름이 결정이 되며 학번은 차례대로 부여되며 생성된 학생들은 캠퍼스로 이동한다. 사용자 명령에 따른 동작은 종료 메뉴를 선택하기 전까지 선택한 메뉴를 수행하는 것을 반복한다. 메뉴에는 학생 이동, 초점 이동, 전체 정보 보기가 있다. ..

[C# 소스] 클래스 간의 관계 - 5. 의존(Dependency) 관계

[C# 소스] 클래스 간의 관계 - 5. 의존(Dependency) 관계 의존 관계는 다른 개체의 변화가 발생했을 때 자신에 영향을 받는 개체 사이의 관계입니다. 그리고 특정 개체의 생성을 담당할 때도 의존 관계로 표현합니다. GUI(Graphic User Interface) 프로그램에서 특정 데이터의 정보를 화면에 표시하는 컨트롤과 데이터 사이에는 의존 관계로 표현할 수 있습니다. UI 컨트롤을 통해 사용자가 개체의 속성을 입력하면 의존 관계에 있는 개체의 속성을 변경해야겠죠. 혹은 개체의 속성이 변하면 UI 컨트롤을 통해 변경한 정보를 사용자에 알려주어야 할 것입니다. 이 책에서는 GUI를 다루고 있지 않아 이와 같은 의존 관계는 표현하지 않을 거예요. 소프트웨어 설계에 관한 많은 레퍼런스에서는 UI..

[C# 소스] 클래스 간의 관계 - 4. 연관(Association) 관계

[C# 소스] 클래스 간의 관계 - 4. 연관(Association) 관계 연관 관계는 명령 개체와 피 명령 개체가 명확하지 않은 관계입니다. 프로그램에서는 연관 관계로 표현하지 말고 직접 연관 관계로 표현하는 것이 안전합니다. 연관 관계는 약사와 의사처럼 “약사와 의사는 환자 치료에 연관이 있다.”와 같이 수평적인 관계입니다. 의사는 환자 치료를 위해 어떠한 약을 처방받아 먹고 있는지 알 수 있어야 합니다. 또한 약사는 약을 조재하기 위해서는 의사의 처방이 필요합니다. 그런데 이와 같은 관계에서 프로그램을 잘못 작성하여 버그가 날 위험이 많습니다. 예를 들어 의사의 “치료하다” 기능에서 약사의 “조재하다”를 호출하게 구현하고 약사의 “조재하다” 기능에서 의사의 “치료하다”를 호출한다면 스택 오버 플로우..

[C# 소스] 클래스 간의 관계 - 3. 직접 연관(DIrected Association) 관계

[C# 소스] 클래스 간의 관계 - 3. 직접 연관(DIrected Association) 관계 직접 연관 관계는 프로그램에서 가장 흔하게 볼 수 있는 관계로 명령을 내리는 개체와 명령을 받아 수행하는 개체의 관계입니다. “고용자는 피 고용자에게 일을 시킬 수 있다.” 처럼 프로그램 세계에서는 매우 자연스러운 관계입니다. 목적 집단에서 목적을 달성하기 위해 상하 관계가 존재하는 것처럼 프로그램도 특정 목적을 수행하기 위한 코드 집합이어서 직접 연관 관계가 필요합니다. using System; namespace 직접연관관계 { class Employee { int capa; string name; public Employee(int capa, string name) { this.capa = capa; th..

[C# 소스] 클래스 간의 관계 - 2. 집합(Aggregation) 관계

[C# 소스] 클래스 간의 관계 - 2. 집합(Aggregation) 관계 필통과 펜의 관계처럼 "필통은 펜을 보관할 수 있다."라는 논리적 관계를 집합이라 합니다. 집합 관계에서는 소유 개체와 피 소유 개체의 생성 시기와 소멸 시기가 같지 않아도 됩니다. using System; using System.Collections; namespace 집합_관계 { class Pen { string maker; string name; public Pen(string maker, string name) { this.maker = maker; this.name = name; } public override string ToString() { return string.Format("상품명:{0} 제조사:{1}", n..

9. 접근성 평가 도구 만들기 - 10. AccEvalProject 클래스 구현

9.2.7 AccEvalProject 클래스 접근성 평가 프로젝트의 주요 정보를 수집하고 이를 관리하는 클래스를 정의합시다. 클래스의 이름은 AccEvalProject라고 정할게요. AccEvalProject에서는 자동화 요소를 수집하여 계층적인 형태로 보관하는 부분이 있습니다. 그리고 폼에서 특정 노드를 선택하면 해당 노드와 매핑하는 자동화 요소를 찾을 수 있어야 하는데 여기서는 자동화 요소를 구분할 수 있는 문자열과 트리 노드를 쌍으로 하는 사전을 멤버로 선언할게요. Dictionary node_dic = null; 그리고 평가 프로젝트를 종료할 때 이 사실을 통보하기 위한 이벤트와 평가 대상 창의 사각 영역이 변경되었을 때 통보하기 위한 이벤트를 선언할게요. public event EventHand..

9. 접근성 평가 도구 만들기 - 5. ImageCaptuer 클래스

9.2.3 ImageCapture 클래스 화면 요소를 캡쳐하는 메서드에서는 UI 요소가 있는 사각 영역을 인자로 받아 Bitmap 이미지를 만들어 반환할게요. 자동화 요소의 사각 영역 정보는 WindowsBase.dll에 정의하고 있는 Rect 형식을 사용하고 있습니다. 접근성 평가 도우미는 Windows Form 응용 프로그램 템플릿으로 만들 것이므로 Rectangle 형식을 인자로 받는 메서드도 제공할게요. using System.Drawing;using System;namespace 예제_9_접근성_평가_도우미{ public class ImageCapture { static Point point = new Point(0, 0); public static Bitmap CaptureFormRect(Re..

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

반응형