Advanced C# 2. 인터페이스 | |
등록: 한빛미디어(주) (2003-02-04 22:35:56) | |
저자: 한동훈(traxacun at unitel.co.kr) UML에서 추상 클래스는 이탤릭체로 표기한다. 다음은 추상클래스와 이를 상속한 구상 클래스를 나타낸 클래스 다이어그램이다.
UML에서 인터페이스를 나타내기 위해 다음과 같은 도형을 사용할 수 있다.
집합(Aggregation) 연관
위 클래스의 소스 코드는 다음과 같다.
복합 연관은 집합 연관과 비슷하지만 하나의 전체(Whole) 클래스에만 속할 수 있는 관계를 나타내기 위해 사용하며 선의 끝에 채워진 마름모를 사용하여 표기한다.
Conceptual Subclass는 "상위 클래스의 정의가 그대로 하위 클래스에 적용되어야 한다(100% Rule)"와 "하위 클래스는 상위 클래스의 한 종류이어야 한다(is kind of Rule)"을 만족하는 경우에 Conceptual Subclass라 한다. 이러한 Subclass를 모델링 과정에서 필요에 따라 다시 하위 클래스로 분류하게 되는 경우가 있는데 이를 분할(Partition)이라 한다. 하위 클래스에서 필요로 하는 특별한 속성이나 오퍼레이션이 있는 경우에 하위 클래스로 분할하게 된다. 전자결재 시스템에서 지불방법(Payment)을 모델링한 경우에 신용카드 결재인가에 따라서 추가적인 속성이나 오퍼레이션을 갖게되기 때문에 이러한 경우에는 신용카드 결재(CreditPayment)와 현금 결재(CashPayment)와 같이 분할하게 된다. 반대로 분할이 무의미한 경우에는 이들을 다시 하나로 결합하기도 한다. 예를 들어 남성 고객(Male Customer)와 여성 고객(Female Customer)을 모델링한 경우에 두 클래스간에 차이점이나 특별한 속성, 오퍼레이션을 갖지 않는 경우 이들을 다시 하나로 합치는 것이 바람직하다. 여러 클래스들에서 비슷한 작업을 하는 공통적인 요소(속성이나 오퍼레이션)들을 발견할 수 있는 경우에는 이들을 상위 클래스로 일반화(Generalization)하는 것이 바람직하다. 주석(Notation) UML에 있는 다이어그램으로 모든 것을 설명할 수는 없기 때문에 스테레오 타입과 함께 주석을 사용할 수 있다. 주석은 다음과 같이 표현된다.
UML에서 자주 쓰이는 클래스 다이어그램에 대해서 간략하게 설명하였다. UML에 대해서 그리 많은 지식을 갖고 있지 않기 때문에 매우 빈약한 설명이 되었다. UML에 대해서 관심이 있다면 UML과 함께 방법론에 대해서 학습할 것을 권한다. Conceptual Subclass에 대한 이야기는 실현(Realization)에서 설명했어야 하지만 미처 하지 못했기 때문에 여기서 간략하게 소개하였다. 참고 도서에는 가장 잘 알려진 3권의 도서를 넣었다. UML에 대해서 잘 모른다면 『The Unified Modeling Language Users Guide』로 시작하는 것이 가장 좋으며 그 다음으로 『UML Distilled』를 읽어보고, 프로젝트에서 전체적인 흐름을 알아보고자 하는 분들에게는 『Applying UML and Patterns』를 참고하기 바란다. 불행히도 이 책만 국내에 번역서가 없다. 그외에 『UML In a Nutshell』 (오라일리)와 『The Instant UML』 (Wrox)는 가장 많은 개발자들이 서가에 꽂아놓고 참고하는 책이다. 개인적으로 비교적 작은 크기이면서 찾아보기 편한 『UML In a Nutshell』을 좋아한다. 책상앞에 두고 참고하고 싶은 레퍼런스를 원한다면 이 두 권 중에 하나를 고려해보기 바란다. (이 글이 한빛사이트에 등록되는 것과 나의 추천은 전혀 별개의 문제이며 인터넷을 통해 여러분은 쉽게 진실을 가려낼 수 있다. 3일이면 들통날 거짓말은 하지 않는게 필자의 지론이다.) 참고자료
|
'알고리즘' 카테고리의 다른 글
Advanced C# 5. DP - Factory Method (0) | 2008.01.08 |
---|---|
Advanced C# 3. 디자인 패턴(DP)과 Simple Factory Pattern (0) | 2008.01.08 |
Advanced C# 1. UML (0) | 2008.01.08 |
IDisposable 살펴보기(CLR Inside Out) (0) | 2007.07.13 |
C#에서 C API사용 (0) | 2006.09.12 |