다루는 내용
- 정적 생성자
- 디폴트 생성자
- this를 이용
- base를 이용
|
이번에는 다음과 같은 클래스 다이어그램 구조를 갖는 응용을 모델로 생성자에 대해서 살펴보기로 하자.
설명도 생성자에 맞추어 설명을 할 것이지만 앞으로 어떻게 전개해 나갈지는 여러분이 상상해 나가며 비교했으면 좋겠다.
프로젝트의 소스 파일 구성은 다음과 같다.
솔루션 파일 구성 | |
BasicInfo | 사람이 갖는 기본 정보(구조체) |
EhLib | Eh 라이브러리 |
LectureRoom | 강의실 |
Man | 사람 |
Program | 진입점 클래스 |
Student | 학생 |
SunBee | 실제 응용 클래스 |
Basicinfo
구조체의 생성자에 대해서 살펴보자.
구조체는 매개 변수가 없는 명시적 생성자를 포함할 수 없습니다.
구조체의 경우도 매개 변수가 있는 생성자를 둘 수가 있다.
생성자에서 this를 사용할 수가 있다. 먼저 this호출에 맞는 생성자가 수행된 후에 해당 생성자 구문이 수행된다.
생성자가 내부적으로 두 번 호출된다고 해서 두개의 인스턴스가 생성되는 것은 아니니 걱정은 할 필요없다.
생성자에서 this를 사용하면 this호출에 맞는 생성자가 수행 후에 해당 생성자가 수행된다.
Lecture
클래스의 경우는 매개 변수 없는 생성자를 명시할 수 있다.
Man , Student
여기서는 base클래스로 부터 파생된 클래스의 생성에 관련된 생성자를 살펴보자.
base클래스에 매개 변수 없는 생성자가 없다면 파생된 클래스에선 base클래스의 생성자를 호출하기 위한 다른 수단을 제공해야 한다.
base클래스에 매개 변수 없는 생성자가 없다면 파생된 클래스에선 base를 이용하여 매개 변수 있는 base클래스의 생성자를 호출해 주어야 한다.
파생된 인스턴스의 생성 순서는 base클래스 → 파생된 클래스 순이다.
SunBee
여기서는 개체의 생성자의 액세스 수준을 private로 하는 것에 대해 살펴보자.
생성자를 private로 하면 해당 클래스 내부에서만 생성자에 접근을 할 수가 있어 외부에서 인스턴스를 생성할 수가 없다. 이러한 것은 왜 있을까? 클래스를 추상화 시켜서 static 메소드만 존재하게 만들어 라이브러리를 만드는 경우와 SunBee처럼 인스턴스의 생성 규칙을 정하고 외부에서 사용할 수 있는 static한 메소드를 제공할 수도 있다. 위의 예는 signleton 패턴의 한 구현 예라고 볼 수 있을 것이다.
EhLib클래스의 생성자의 액세스 권한은 private로 설정되어 있다. 그리고, 클래스 내부에 인스턴스를 생성하는 구문이 존재하지 않느다. 즉, 해당 클래스의 인스턴스로 만들 수가 없어 아무런 의미 없는 클래스처럼 보인다.
하지만 static한 메소드나 const 멤버를 갖고 있지 않다면 클래스명으로 해당 멤버에 접근할 수 있는 유효한 클래스의 멤버를 갖을 수 있기 때문에 충분히 의미가 있게 사용할 수 있다.
참고로 class명 앞에 abstract을 명시하여 추상 클래스로 정의를 하였는데 이를 하지 않는다 하더라도 내부에 생성자를 호출하는 구문이 없기 때문에 충분히 추상화되어 있기는 하다. 하지만, 프로그램 소스라는 것은 언제나 변할 수 있다는 것을 생각하면 abstract을 명시한다 하여 손해 볼 것은 없을 것이다.
액세스 권한이 private인 생성자
- 내부에 인스턴스를 생성하는하는 구문이 존재하지 않음
static한 메소드나 const멤버를 두어 프로그램 전역 라이브러리나 전역 상수 클래스로 활용할 수 있다.
- 내부에 인스턴스를 생성하는하는 구문이 존재함
해당 구문은 static한 메소드 내부여야 한다. 이는 내부 정책에 의해 인스턴스의 생성을 관리하겠다는 것으로 좀 더 깊이 연구할 필요가 있는 이들은 생성 패턴에 대해 살펴보도록 하자. 주의할 것은 패턴을 맹목적으로 따르지 마라.
StarUML에 관하여[발췌] 원본 바로가기
StarUML은 빠르고, 유연하고, 확장가능하며, 풍부한 기능에 Win32 플랫폼에서 무료로 사용할 수 있는 UML/MDA 플랫폼(툴)을 개발하기 위한 오픈 소스 프로젝트입니다. StarUML 프로젝트의 목적은 Rational Rose, Together와 같은 상업적 도구를 비싼 돈을 들여 사용하지 않더라도 그에 준하는 기능을 갖춘 오픈 소스 소프트웨어 모델링 도구 및 플랫폼을 개발하는 것입니다.
- UML 2.0 : UML 은 OMG(Object Management Group)가 지속적으로 관리하는 통합 표준입니다. 최근에 UML 2.0이 릴리즈 되었으며 StarUML은 UML 2.0 을 지원하며 최신 UML 표준을 지원하고 있습니다.
- MDA (Model Driven Architecture) : MDA는 OMG가 도입한 새로운 기술입니다. MDA의 장점을 얻기 위해서는 소프트웨어 모델링 툴은 많은 커스터마이징 요소들을 지원해야만 합니다. StarUML은 MDA를 지원할 수 있도록 설계되었고 UML 프로파일, 접근법, 모델 프레임워크, 표기법 확장, MDA 코드 및 문서 템플릿 등 수많은 커스터마이징 요소들을 제공합니다. 이러한 것들은 여러분의 조직문화, 프로세스 및 프로젝트에 툴을 맞출 수 있도록 도와줍니다.
- 플러그-인 아키텍처 : 많은 사용자들이 소프트웨어 모델링툴에 더 많은 기능을 요구합니다. 이러한 요구사항에 부합하기 위해, 툴은 플래폼에 매우 잘 정의된 플러그를 가져야만 합니다. StarUML 은 누구든지 COM과 호환가능한 언어(C++, Delphi, C#, VB 등)에서 플러그인 모듈을 개발할 수 있게 단순하며 강력한 플러그인 아키텍쳐를 제공합니다.
- 사용성 : 사용성은 소프트웨어 개발의 가장 중요한 사항입니다. StarUML은 퀵 다이얼로그, 키보드 조작, 다이어그램 오버뷰 등과 같이 많은 사용자들에게 친숙한 특징을 제공할 수 있도록 적용되었습니다.
'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글
11.Class (0) | 2009.08.19 |
---|---|
10.Casting (0) | 2009.08.19 |
9.String (0) | 2009.08.19 |
8. Object (0) | 2009.08.19 |
7. 배열 (0) | 2009.08.19 |
6. valuetype 기본 형식 (0) | 2009.08.19 |
5. .NET Framework (0) | 2009.08.19 |
4. const 와 readonly (0) | 2009.08.19 |
3. 소멸자 (0) | 2009.08.19 |
1.Welcome! Here is ehclub.net (0) | 2009.08.19 |