이번 포스트는 소프트웨어 개발 프로세스 단계중 계획 및 요구분석, 설계 부분에 해당하는 클래스 다이어그램에 대해 다뤄보겠습니다.
클래스 다이어그램을 알기 이전에 소프트웨어 개발 생명주기(SDLC: Software Development Life Cycle)을 먼저 간단히 알아보고 UML을 살펴본뒤 클래스 다이어그램에 대해 설명하겠습니다!
소프트웨어 개발 생명주기란?
💡 계획 → 분석 → 설계 → 구현 → 테스트 → 유지보수
소프트웨어 개발 프로세스는 6단계(경우에 따라 7단계)입니다.
알아봐야 할 계획 및 요구분석에 대해 살짝 알아보자면
계획 단계
- 개발 비용 산정
- 일정 계획
- 위험 관리
요구분석 단계
- 기존 시스템의 문제 파악 - 새로운 요구사항 도출 및 다이어그램 작성
- 개발 방법론에 따른 표현 도구 - 구조적 방법론, 정보공학 방법론, 객체지향 방법론(UML의 유스케이스 다이어그램 등)
- 최종 산출물 - 요구 분석 명세서
설계 단계
- 분할과 정복, 추상화, 단계적 분해, 모듈화, 정보 은닉
- 소프트웨어 아키텍처, 객체지향 설계
- 아키텍처 스타일
- 디자인 패턴
- 모듈 평가 기준 - 응집도와 결합도
UML(Unified Modeling Language)이란?
UML은 시스템이 상호작용하는 측면, 시스템 전체 구조 측면, 컴포넌트 간의 관계 등을 시각적으로 볼 수 있게 나타낸 도면입니다.
UML은 시스템 개발을 위한 시각적인 설계 표기를 제공하며, 객체 지향 시스템을 개발할 때 산출물을 명세화, 시각화, 문서화하는 데 사용합니다.
그리고 개발하는 시스템을 이해하기 쉬운 형태로 표현하여 분석가, 설계자, 의뢰인이 효율적으로 의사소통을 할 수 있게 해줍니다.
→ UML은 표준화된 통합 모델링 언어
UML이 제공하는 표준화된 다이어그램 종류
구조 다이어그램(Structural Diagram)
- 클래스 다이어그램(Class Diagram)
- 복합 구조 다이어그램
- 객체 다이어그램
- 배치 다이어그램
- 컴포터는 다이어그램
- 패키지 다이어그램
행위 다이어그램(Behavioral Diagram)
- 활동 다이어그램
- 유스 케이스 다이어그램
- 상태 머신 다이어그램
상호작용 다이어그램(Interaction Diagram)
- 순차 다이어그램
- 통신 다이어그램
- 타이밍 다이어그램
이렇게 다양한 다이어그램이 있으나 클래스 다이어그램에 대해 알아보겠습니다.
UML의 특징
- 시각화(Visualization) 언어이다.
- 소프트웨어의 개념 모델을 시각적인 형태로 표현하며 명확히 정의된 표준화된 다이어그램을 제공하며 이를 이용해 오류 없는 원활한 의사소통이 가능합니다.
- 명세화(Speccification) 언어이다.명세화에서 각 다이어그램의 기호는 의미를 담고 있으며 추상적이지만 고유의 특성을 갖고 있습니다.
- 소프트웨어 개발 과정인 분석, 설계 단계의 각 과정에서 필요한 모델을 정확하고 안전하게 명세화하여 만들 수 있습니다.
- 구축(Construction) 언어이다.UML로 설계된 모델을 프로그램 코드로 자동 변환할 수 있으며, 이미 구축된 소스 코드를 UML로 역변환하여 분석하는 역공학이 가능합니다.
- 다양한 프로그래밍 언어로 표현 가능합니다.
- 문서화(Documentation) 언어이다.
- StarUML, 투게더 등 케이스 툴을 이용해 설계한 내용을 자동으로 문서화 가능합니다.
💡 개발하고자 하는 프로그램을 시각적으로 표현하는 것이며, 이때 의뢰자의 요구에 맞게 쉽게 수정해서 결과적으로 유지보수 기간을 줄여 생산성을 높일 수 있습니다.
모델링이 필요한 이유
개인이 진행하는 프로젝트의 경우 모델링이 꼭 필요하지 않습니다.
하지만, 대규모 프로젝트의 경우 모델링을 통해 보다 완벽하게 설계된 프로그램을 만들어야 유지보수가 용이합니다.
클래스 다이어그램(Class Diagram)이란?
소프트웨어의 기본 구성 단위인 시스템에서 사용하는 클래스를 정의합니다.
클래스들이 서로 어떻게 연결되어 있고 어떤 역할을 하는지 다이어그램으로 표현합니다.
클래스
- 데이터(속성)와 메서드를 묶어 놓은 것
- 세 칸의 직사각형 모양
- 첫 번재 칸에는 클래스 이름
- 두 번재 칸에는 클래스의 속성
- 마지막 칸은 클래스가 제공하는 기능인 메서드를 나타냄
클래스의 구성 요소
클래스는 클래스 이름, 속성, 메서드로 구성되어 있습니다.
클래스
- 공통의 속성, 메서드(오퍼레이션), 관계, 의미를 공유하는 객체 집합에 대한 기술
속성
- 클래스의 구조적 특성에 이름을 붙인 것
- 구조적 특성에 해당하는 인스턴스가 보유할 수 있는 값의 범위를 기술
- 영문 소문자로 시작함
클래스 정리
이름
- 클래스는 다른 클래스와 구별되는 ‘유일한’ 이름을 가짐
- 이름에 명사나 명사구를 사용하며 두 단어를 사용할 때는 붙여쓰되 각 단어의 첫 글자는 ‘대문자’로 씀
- 복수형, 소유격, 형용사는 가급적 쓰지 않음
속성
- 클래스가 갖는 정적인 특성
- 속성의 이름은 소문자로 나타내며 두 단어를 사용할 때는 두 번째 단어의 첫 글자는 ‘대문자’로 씀
메서드
- 클래스가 외부의 다른 객체에게 제공할 서비스와 기능
- 외부 클래스는 메서드를 통해 해당 클래스에 접근할 수 있음
- 외부에서 이 기능을 요구하는지에 따라 메서드로 도출할지 판단
가시성
- 속성과 메서드의 접근 권한을 지정하는 방식
클래스 다이어그램의 예
- 학생은 여러 과목을 수강할 수 있습니다.
- 학생은 하나의 학교에 소속되어 있습니다.
- 교수는 하나의 학교에 소속되어 있습니다.
- 교수 한 명은 여러 과목을 강의합니다.
- 교수 한 명은 여러명의 학생을 상담합니다.
객체와 클래스 사이의 관계와 표현
연관 관계는 의존 관계와 마찬가지로 객체를 생성하는 관계입니다.
그러나 연관 관계는 멤버 변수로 참조하고, 의존 관계는 메서드로 참조한다는 것이 다릅니다.
UML 표기법
직접 작성해본 기초적인 자판기 클래스 다이어그램
이런식으로 클래스 다이어그램으로 직접 지정한 관계들을 코드로 변환할 수 있습니다.
참고 자료 :
[UML] 클래스 다이어그램 작성법 - Heee's Development Blog
[UML] 클래스 다이어그램 작성법 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
최근댓글