반응형

전체 글 2934

[C#] 7.3 설계한 내용 프로젝트에 옮기기 - 발표 수업

7.3 설계한 내용 프로젝트에 옮기기 발표 수업 [그림] 발표 수업 시퀀스 다이어그램 이번에는 발표 수업에 관한 시퀀스 다이어그램을 보면 필요한 멤버를 추가해 봅시다. 발표 수업에서 학생들 정보를 출력하는 부분은 이미 추가하였기 때문에 별다른 작업을 할 필요가 없습니다. 발표할 학생을 선택하였을 때 해당 학생에게 발표를 수행하게 하려면 캠퍼스 생활에서 강의실 개체에 해당 행위와 선택한 학생 정보를 인자로 전달하는 메서드 DoIt을 추가해야겠지요. 이 메서드 또한 다른 시퀀스 다이어그램들을 보면 각 장소의 기반 클래스에서 추상 메서드로 제공하고 각 장소에서 특정 학생에게 수행할 작업을 약속하여 이를 수행하는 부분을 재정의하세요. class LectureRoom:Place { ... 중략 ... intern..

[C#] 7.3 설계한 내용 프로젝트에 옮기기 - 판서 강의

7.3 설계한 내용 프로젝트에 옮기기 판서 강의 [그림] 판서 강의 시퀀스 다이어그램 이번에는 초점이 강의실로 이동되어 판서 강의하는 부분을 시퀀스 다이어그램을 보며 필요한 멤버를 추가해 봅시다. 캠퍼스 생활에서는 강의실에 판서 강의하라는 것을 DoIt 메서드에 해당 행위를 인자로 전달하게 되어 있네요. 이 부분은 기능 확장을 쉽게 하기 위해 각 장소에 따라 수행할 수 있는 일의 종류를 정의하고 입력 인자로 해당 일의 종류를 전달받아 수행하게 한 것입니다. 따라서 다른 시퀀스 다이어그램까지 살펴보면 DoIt 메서드는 각 장소의 기반 클래스인 Place에 추상 메서드로 약속하고 각 장소에서는 재정의하면 된다는 것을 생각할 수 있을 것입니다. class LectureRoom:Place { internal L..

[C#] 7.3 설계한 내용 프로젝트에 옮기기 - 초점 이동

7.3 설계한 내용 프로젝트에 옮기기 초점 이동 [그림] 초점 이동 시퀀스 다이어그램 이번에는 초점 이동에 대한 시퀀스 다이어그램을 보면서 멤버를 추가해 봅시다. 초점 이동에 대한 시퀀스 다이어그램에서는 각 장소에 따라 다르게 수행되는 부분은 약속하지 않고 공통적인 부분만 약속하였습니다. 초점 이동에 관한 시퀀스를 보시면 각 장소로 초점이 이동되고 나서 다시 캠퍼스 생활로 초점이 돌아오면 어떻게 학생들을 복귀시킬 것인지에 대한 시퀀스가 약속되어 있습니다. 먼저, 캠퍼스 생활에서 해당 장소에 학생의 수를 얻어오는 부분이 있고 특정 학생의 정보를 얻어오는 부분이 있습니다. 그리고 사용자에 의해 선택된 학생 번호에 해당하는 학생을 얻어오는 메서드가 약속되어 있네요. 그리고 캠퍼스 생활에서 캠퍼스 개체에게 복귀..

[C#] 7.3 설계한 내용 프로젝트에 옮기기 - 학생 이동

7.3 설계한 내용 프로젝트에 옮기기 학생 이동 [그림] 학생 이동 시퀀스 다이어그램 이제 학생 이동 시퀀스 다이어그램에 약속된 호출들을 추가해 봅시다. 해당 시퀀스 다이어그램을 보면 캠퍼스 클래스에는 학생의 수를 반환하는 GetStuCount 와 GetStuInfo, GetStudent 메서드를 추가하면 되겠죠. 그런데, GetStuCount는 멤버 속성으로 하면 어떨까요? 그리고 GetStudent를 인덱서로 하면 어떨까요? 어떠한 것으로 하더라도 큰 문제가 되지 않지만, C# 언어에서 제공하는 문법적 요소의 특징을 고려한다면 변경하는 것이 나을 것 같습니다. 이처럼 개발 과정에서 이전 단계들에서 약속한 것을 수정하기를 원한다면 약속한 문서를 반드시 수정하는 것을 잊지 마시기 바랍니다. 실제 개발에서..

[C#] 7.3 설계한 내용 프로젝트에 옮기기 - 클래스 추가

7.3 설계한 내용 프로젝트에 옮기기 클래스 추가 이제는 앞에서 설계한 내용을 기반으로 프로젝트에 필요한 클래스를 추가하고 필요한 멤버를 추가해 보기로 합시다. 먼저, 설계 단계의 클래스 다이어그램에 해당하는 클래스를 프로젝트에 추가하시고 일반화 관계에 있으면 상속에 대해 표현하시기 바랍니다. 캠퍼스 생활(CampusLife)은 단일체로 정의하기로 하였으니 이에 대해 표현을 합시다. 단일체를 표현하는 방법은 캡슐화의 생성자 항목에서 설명했으므로 별도의 설명은 하지 않겠습니다. ▶ CampusLife.cs Class Campus { internal Campus() //기본 생성자 { throw new NotImplementedException(); } } 초기화 단계에서 학생 생성하는 시퀀스 다이어그램을 ..

[C#] 7.2.2 프로젝트 설계 - 시퀀스 다이어그램

7.2.2 시퀀스 다이어그램 작성 클래스 다이어그램을 작성하였으면 시나리오를 기반으로 분석된 기능별로 시퀀스 다이어그램을 작성합시다. 먼저, 초기화 과정에 대해 살펴봅시다. 초기화에서는 캠퍼스 생성과 장소들을 생성하는 것과 학생 생성이 진행하기로 되어 있습니다. 캠퍼스 생성이나 장소들을 생성하는 것은 사용자와의 상호 작용 없이 진행되기 때문에 단순히 생성자만 호출하면 됩니다. 그리고 학생 생성은 사용자에 의해 생성할 학생 수를 입력, 생성할 학생 유형을 선택, 학생의 이름을 결정하기 위해 상호 작용이 필요합니다. 또한, 생성된 학생은 Campus에 보내야겠지요. [그림32 - A] 초기화 시퀀스 다이어그램(캠퍼스와 장소 생성) [그림32 - B] 초기화 시퀀스 다이어그램(학생 생성) [그림32] 초기화 ..

[C#] 7.2 프로젝트 설계 - 클래스 다이어그램

7.2 프로젝트 설계 설계 단계에서는 클래스 다이어그램과 시퀀스 다이어그램을 작성을 할게요. 클래스 다이어그램에서는 프로그램에서 정의해야 할 클래스와 클래스 간의 관계를 정의하고 도식합니다. 그리고 시퀀스 다이어그램은 각 기능이 사용자와 개체들 사이에 어떠한 순서로 메시지를 주고받아 진행되는지를 결정할 것입니다. 이 책에서 시퀀스 다이어그램은 서로 다른 개체 사이에서 주고받는 것만 약속하고 도식하겠습니다. 7.2.1 클래스 다이어그램 작성 먼저, 시나리오를 보면서 클래스로 정의할 것들을 조사해 봅시다. 시나리오에 나타나는 명사들을 먼저 살펴보고 무언가를 수행할 역할이 있다면 클래스로 정의할 후보가 될 것입니다. 그리고 하나의 클래스가 너무 많은 멤버 필드나 너무 많은 역할을 한다면 좀 더 세부적으로 나누..

[C#] 7. 프로젝트 - 시나리오

7. 프로젝트 이번 장에서는 이제까지 다룬 내용을 다루는 간단한 콘솔 응용 프로그램을 작성하면서 정리해 보기로 합시다. 여기에서는 효과적인 프로그래밍을 위해 시나리오, 설계, 구현 단계로 나누어 작업하기로 하겠습니다. 일반적인 CBD 개발 방법론에서는 요구 분석 및 정의 단계를 수행한 후에 역할에 따라 컴포넌트를 구성하고 이들에 대한 관계 및 인터페이스 약속, 비지니스 개체 모델링 등을 수행하는 아키텍처 단계에서 추상적인 설계를 진행하지만 생략하기로 하겠습니다. 7.1 시나리오 프로젝트 명: 캠퍼스 생활 캠퍼스 생활은 콘솔 기반의 응용 프로그램이다. 프로그램은 초기화, 사용자 명령에 따른 동작 순으로 수행된다. 초기화에서는 캠퍼스 생성과 장소 생성, 학생 생성이 진행된다. 장소 생성에서는 강의실과 도서관..

[C#] 6.2.6 sealed 키워드를 이용한 봉인

6.2.6 sealed 키워드를 이용한 봉인 C#에서는 특정 형식을 기반 형식으로 사용하지 못하게 봉인시킬 수 있습니다. 봉인 형식을 정의할 때는 형식 명 앞에 sealed 키워드를 명시합니다. [그림 25] 봉인 클래스를 기반 클래스로 사용할 때 오류 화면 그리고 파생 형식에서 재정의한 메서드에 sealed 키워드를 명시하여 이후에 파생 형식에서 재정의하지 못하게 봉인 메서드를 만들 수 있습니다. [그림 26] 봉인된 멤버를 재정의할 때 오류 화면 [C#] 6. 상속과 다형성 - 6.1 상속[C#] 6.2 다형성 - 기반 형식의 변수로 파생한 개체를 참조[C#] 6.2.2 is 연산자와 as 연산자[C#] 무효화 - new 키워드, base 키워드[C#] 6.2.4 가상화 virtual, 재정의 ove..

[C#] 6.2.5 abstract 키워드를 이용한 추상화

6.2.5 abstract 키워드를 이용한 추상화 C#에서는 상속을 통해서만 사용할 수 있는 기반 클래스를 만들 수 있습니다. 이러한 클래스를 만들기 위해서는 abstract 키워드를 이용하여 클래스를 정의하면 되는데 이를 추상 클래스라 합니다. C#에서 추상 클래스는 개체를 생성할 수 없으며 단지 상속을 통해 기반 클래스 역할만 할 수 있습니다. [그림 24] 추상 클래스 형식의 개체를 생성하려고 할 때 오류 화면 추상 클래스에는 추상 메서드를 캡슐화할 수 있는데 abstract 키워드를 명시하고 메서드의 수행 코드는 정의하지 않습니다. 이처럼 추상 메서드를 캡슐화하면 파생 형식에서는 추상 멤버를 재정의해야 개체를 생성할 수 있게 됩니다. ▶ abstract 키워드를 이용한 추상 클래스 정의 및 추상 ..

반응형