반응형

언어 자료구조 알고리즘 1251

[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 키워드를 이용한 추상 클래스 정의 및 추상 ..

[C#] 6.2.4 가상화 virtual, 재정의 override

6.2.4 가상화 virtual, 재정의 override new 키워드로 기반 클래스의 멤버를 무효화 할 때는 사용하는 변수 형식의 멤버가 사용됩니다. 이러한 특징은 기반 형식의 변수로 다양한 파생 개체를 참조할 때 실제 개체에 정의된 멤버가 사용되지 않으므로 다형성의 장점을 충분히 사용하지 못합니다. C#에서는 기반 형식에서 정의한 멤버를 파생 형식에서 재정의하면 변수의 형식이 아닌 개체의 형식의 멤버가 동작하게 virtual 키워드와 override 키워드를 제공합니다. 기반 형식에서 virtual 키워드를 명시하여 멤버를 선언하면 가상 멤버가 됩니다. 이때 파생 형식에서 기반 형식의 가상 멤버를 재정의할 때는 override 키워드를 명시합니다. ▶ virtual로 가상 메서드 선언, overrid..

[C#] 무효화 - new 키워드, base 키워드

6.2.3 무효화 - new 키워드, base 키워드 C#에서 파생된 형식에서 기반 형식에 정의된 멤버와 같은 이름의 멤버를 new 키워드를 사용하여 캡슐화하면 기반 형식의 멤버는 무효화됩니다. 이 때는 사용하는 곳의 형식에 따른 멤버가 사용됩니다. 즉, 기반 형식의 변수로 접근하면 기반 형식의 멤버가 사용되고 파생 형식의 변수로 접근하면 파생 형식의 멤버가 사용됩니다. ▶ new 키워드를 이용한 무효화 class Man { internal void Work() { Console.WriteLine("일을 하다."); } } class Student : Man { internal new void Work() //new 키워드로 기반 형식 Man의 Work 메서드 무효화 { base.Work(); //bas..

[C#] 6.2.2 is 연산자와 as 연산자

6.2.2 is 연산자와 as 연산자 이처럼 기반 형식의 변수로 파생된 개체를 참조할 수 있다는 특징은 사용의 편의성이 제공합니다. 하지만 프로그램에서 파생 형식에만 캡슐화된 멤버에 접근하여 사용해야 할 때도 있습니다. 이 때 is 연산자와 as 연산자를 사용하면 파생 개체를 참조할 수 있습니다. ▶ 용어: 상향 캐스팅 , 하향 캐스팅 Stu stu = man as Stu; //파생된 형식 개체 참조 if (stu != null) //man이 Stu개체일 때 { stu.Study(); } else { Console.WriteLine("Stu 형식 개체가 아닙니다. "); } is 연산자는 이항 연산자로 좌항에 변수가 오고 우항에 형식 명을 명시하면 해당 변수가 해당 형식으로 호환할 수 있는지를 반환합니다..

[C#] 6.2 다형성 - 기반 형식의 변수로 파생한 개체를 참조

6.2 다형성 OOP 언어는 캡슐화, 상속과 더불어 중요한 특징으로 다형성이 있습니다. C#에서의 다형성은 크게 두 가지로 얘기합니다. 첫째로 변수는 여러 형식의 개체를 참조할 수 있다는 것입니다. C#에서는 기반 형식의 변수로 파생된 개체를 참조할 수 있습니다. 두 번째로 변수를 통해 메서드를 호출했을 때 구체적인 동작이 다를 수 있다는 것입니다. C#에서는 기반 형식의 멤버 메서드를 추상 메서드와 가상 메서드로 지정할 수 있는데 파생된 형식에서 재정의하면 기반 형식의 변수로 파생된 개체를 참조했을 때 변수의 형식에 정의된 멤버가 아닌 참조된 실제 개체의 멤버가 수행이 됩니다. 6.2.1 기반 형식의 변수로 파생한 개체를 참조 C#에서는 다형성을 제공하여 기반 형식의 변수로 파생된 개체를 참조할 수 있..

[C#] 6. 상속과 다형성 - 6.1 상속

6. 상속과 다형성 C#에서는 다른 형식을 기반으로 파생된 형식을 정의할 수 있습니다. 이러한 OOP 언어의 특징을 상속이라고 합니다. C#에서 상속은 클래스와 인터페이스가 기반 형식이 될 수 있고 구조체는 기반 형식으로 인터페이스만 가능합니다. 이처럼 상속으로 표현된 기반 클래스와 파생 클래스의 관계를 일반화 관계라고 합니다. C#에서는 기반 형식의 변수로 파생된 형식의 개체를 참조할 수 있어 사용하는 곳에 편의를 제공합니다. 그리고 기반 형식에 정의한 멤버 메서드를 파생 형식에서 재정의할 수 있습니다. 이처럼 기반 형식의 멤버 메서드를 재정의하여 사용하는 변수의 형식의 멤버 메서드가 아닌 실제 참조하고 있는 개체의 멤버 메서드가 수행되게 할 수 있습니다. 이 같은 특징을 다형성이라고 합니다. 이번 장..

[C#] 5.3 접근 한정자

5.3 접근 한정자 C#에서는 정의하는 형식을 사용하는 범위나 형식 내의 멤버에 대해 사용할 수 있는 범위를 접근 한정자를 통해 지정할 수 있습니다. 형식 정의문 앞에 올 수 있는 접근 한정자에는 public과 internal이 있는데 명시를 하지 않으면 internal로 지정됩니다. public으로 접근 지정하면 다른 .NET 어셈블리에서도 접근할 수 있지만 internal로 지정하면 같은 .NET 어셈블리에서만 접근할 수 있습니다. 예를 들어 라이브러리를 만들 때 라이브러리 내에서만 접근할 멤버들은 internal로 외부에서 사용해도 되는 멤버는 public으로 지정합니다. 이에 대해 이해하려면 여러 개의 .NET 어셈블리로 구성된 프로그램을 만들 수 있어야 하는데 여기서 이를 다루는 것은 적절치 않..

반응형