반응형

언어 자료구조 알고리즘/Escort C# 68

[C#] 8.2 컬렉션 - 개요

8.2 컬렉션 개요 프로그래밍하다 보면 여러 개의 개체를 구조적으로 관리하는 것은 자주 발생합니다. C#에서는 요소 개체의 집합체인 컬렉션을 다양하게 제공하고 있으며 같은 인터페이스를 기반으로 구현 약속하여 하나의 컬렉션 사용법을 익히면 다른 컬렉션을 사용법을 익히기 쉽습니다. C#에서 제공되는 컬렉션에는 하나의 개체로 보관하는 컬렉션들과 키와 값을 쌍으로 보관하는 컬렉션들이 있습니다. 하나의 개체로 보관하는 컬렉션들은 IList 인터페이스를 기반이거나 ICollection 인터페이스를 기반으로 정의되어 있습니다. 그리고 키와 쌍으로 보관하는 컬렉션들은 IDictionary 인터페이스를 기반으로 정의되어 있습니다. 또한, IList와 IDictionary 인터페이스는 모두 ICollection 인터페이스..

[C#] 8. 인터페이스와 컬렉션 - 인터페이스

8. 인터페이스와 컬렉션 C#에서는 인터페이스를 통해 기능 구현에 대한 약속을 추상화할 수 있습니다. 인터페이스는 묵시적으로 추상 형식이며 클래스나 구조체에서 이를 구현 약속(상속)하면 약속된 기능들을 구현해야 합니다. 이러한 인터페이스를 이용하면 같은 인터페이스 기반의 여러 개체를 인터페이스 형식 변수로 사용하는 다형성의 장점을 누릴 수 있습니다. 또한, 이를 프로그래밍에 사용하면 같은 인터페이스를 구현 약속된 개체의 사용 방법을 별도로 익힐 필요가 없게 됩니다. 그리고 C#에서는 데이터나 개체를 보관할 수 있는 여러 종류의 컬렉션을 제공하고 있으며 필수적인 인터페이스 기반으로 정의되어 있어서 효과적으로 프로그래밍할 수 있습니다. 8.1 인터페이스 인터페이스는 기능 구현에 대한 약속입니다. 인터페이스의..

[C#] 7.4 프로젝트 구현 - 초점이 기숙사 (잠자기, TV 시청)

7.4 프로젝트 구현 초점이 기숙사 (잠자기, TV 시청) [그림] TV 시청 시퀀스 다이어그램 [그림] 잠자기 시퀀스 다이어그램 이번에는 초점이 기숙사에 왔을 때 수행하는 잠자기와 TV 시청에 대한 부분을 구현하기로 합시다. 앞에서 초점이 강의실과 도서관에 왔을 때 수행하는 부분과 구현하는 방법이 크게 다르지 않겠지요. class Dormitory:Place { ... 중략 ... internal override void DoIt(int cmd) { switch (cmd) { case GameRule.CMD_DO_Sleep: TurnOff(); break; case GameRule.CMD_DO_TV: StartTV(); break; default: return; } } private void Start..

[C#] 7.4 프로젝트 구현 - 초점이 도서관 (책 읽기, 세미나)

7.4 프로젝트 구현 초점이 도서관 (책 읽기, 세미나) [그림] 세미나 시퀀스 다이어그램 [그림] 책 읽기 시퀀스 다이어그램 이번에는 초점이 도서관에 왔을 때 수행하는 세미나와 책 읽기에 대한 부분을 구현하기로 합시다. 앞에서 초점이 강의실에 왔을 때 수행하는 부분과 구현하는 방법이 크게 다르지 않겠지요. class Library:Place { ... 중략 ... internal override void DoIt(int cmd) { switch (cmd) { case GameRule.CMD_LI_Seminar: StartSeminar(); break; default: return; } } private void StartSeminar() { int cnt = GetStuCount(); Student s..

[C#] 7.4 프로젝트 구현 - 초점이 강의실 (판서 강의, 발표 수업)

7.4 프로젝트 구현 초점이 강의실 (판서 강의, 발표 수업) [그림] 판서 강의 시퀀스 다이어그램 이번에는 초점이 강의실에 왔을 때에 수행하는 판서 강의와 발표 수업에 대해 구현해 보기로 합시다. 먼저, 초점이동이 되었을 때 수행하는 MoveFocusAt 메서드를 구현합시다. 여기에서는 입력 인자로 전달된 장소가 어디인지에 따라 각각의 장소에 초점이 왔을 때 수행하는 메서드를 호출하면 되겠네요. class CampusLife { ... 중략 ... private void FocusAtLectureRoom(LectureRoom lectureRoom) { ConsoleKey key; while ((key = SelectLRMenu()) != GameRule.ExitKey) { switch (key) { c..

[C#] 7.4 프로젝트 구현 - 초점 이동

7.4 프로젝트 구현 초점 이동 [그림] 초점 이동 시퀀스 다이어그램 이번에는 초점 이동 기능에 해당하는 MoveFocus 메서드를 구현해 보기로 합시다. 마찬가지로 초점 이동에 관한 시퀀스 다이어그램을 보면서 작성을 하시면 되겠죠. 초점 이동에서는 먼저, 어디로 초점을 이동할 것인지를 선택한 후에 해당 장소에서 수행할 수 있는 메뉴에 의해 진행이 된 후에 다시 초점이 캠퍼스 생활로 올 때 사용자가 선택한 학생들을 캠퍼스로 복귀시키면 됩니다. 이에 다음과 같이 MoveFocus 메서드를 구현해 보았습니다. class CampusLife { ... 중략 ... private void MoveFocusAt(Place place) { //throw new NotImplementedException(); } }..

[C#] 프로젝트 구현 - 학생 이동

7.4 프로젝트 구현 학생 이동 [그림] 학생 이동 시퀀스 다이어그램 이제 학생 이동에 대한 MoveStudent 메서드를 구현해 봅시다. 시퀀스 다이어그램을 보면 학생 이동 기능에서는 먼저 캠퍼스에 있는 모든 학생 정보를 보여주고 사용자가 이동할 학생 번호를 입력한 후에 장소를 선택하면 해당 장소로 보내기로 되어 있습니다. 그런데 현재 약속된 시퀀스 다이어그램에서는 선택된 학생이 캠퍼스에도 여전히 존재하게 되어 있네요. 이에 선택된 장소에 학생을 보내기 전에 캠퍼스에세 나오게 하는 메서드(OutStudent)를 Campus 클래스에 추가하기로 할게요. 여러분들은 시퀀스 다이어그램에도 수정하시기 바랍니다. class CampusLife { ... 중략 ... private void MoveStudent(..

[C#] 7.4 프로젝트 구현 - Run(메뉴 및 사용자와 상호작용)

7.4 프로젝트 구현 Run 이제 CampusLife의 사용자 명령에 따라 동작하는 Run 메서드를 구현해 보기로 합시다. Run에서는 메뉴를 선택하면 해당 메뉴의 기능을 선택하는 것을 반복하면 되겠죠. 먼저, CampusLife에서 사용할 키에 대한 상수를 GameRule에 멤버로 추가할게요. class CampusLife { ... 중략 ... internal void Run() { ConsoleKey key; while ((key = SelectMenu()) != GameRule.ExitKey) { switch (key) { case GameRule.MoveStuKey: MoveStudent(); break; case GameRule.MoveFocusKey: MoveFocus(); break; ca..

[C#] 7.4 프로젝트 구현 - 초기화

7.4 프로젝트 구현 초기화 [그림] 초기화 - 캠퍼스와 장소 생성 시퀀스 다이어그램 [그림] 초기화 - 학생 생성 시퀀스 다이어그램 이제는 시나리오와 시퀀스 다이어그램 등을 보면서 구체적으로 구현해 보기로 합시다. 시나리오를 보시면 캠퍼스 생활은 크게 초기화 부분과 사용자에 의한 동작으로 나눌 수가 있습니다. 이에 캠퍼스 생활에는 초기화하는 Init 메서드와 사용자에 의한 동작인 Run 메서드를 추가하고 프로그램 진입점에서는 캠퍼스 생활 단일체를 참조하여 Init과 Run 메서드를 호출하기로 합시다. class CampusLife { ... 중략 ... internal void Init() { throw new System.NotImplementedException(); } internal void R..

[C#] 7.3 설계한 내용 프로젝트에 옮기기 - TV 시청

7.3 설계한 내용 프로젝트에 옮기기 TV 시청 [그림] TV 시청 시퀀스 다이어그램 초점이 기숙사에 온 상태에서 TV 시청을 선택했을 때에 대하여 시퀀스 다이어그램을 보며 필요한 부분을 추가해 봅시다. 여기에서는 기숙사에서 학생에게 TV를 시청하게 하는 WatchingTV 메서드만 추가하면 되겠네요.

반응형