소프트웨어 개발 과정에서 다양한 설계 도구들이 사용되는데, 그 중 액티비티 다이어그램과 클래스 다이어그램은 UML(Unified Modeling Language)
(= 도메인을 모델로 표현해주는 대표적 모델링 언어)을 이용하여 시스템의 동작과 구조를 표현하는 데에 매우 중요하다.
이 두 다이어그램은 각각 프로세스의 흐름과 시스템의 구조적 측면을 나타내며, 개발자들에게 시스템의 이해를 돕고, 효율적인 설계를 가능하게 한다.
액티비티 다이어그램
은 프로세스 또는 작업의 흐름을 시각화하는 데 사용되는 다이어그램으로, 플로우차트와 유사한 형태를 가지고 있다.이 다이어그램은 시스템이 어떻게 동작하는지, 즉 동작의 순서와 조건을 기반으로 한 처리 로직의 흐름을 정의한다.
프로세스 흐름 도식화 - 액티비티 다이어그램은 프로세스의 흐름을 도식화하여 프로그램 로직을 정의할 수 있다.
비즈니스 프로세스 정의 - 비즈니스 프로세스의 정의에 활용되어, 조건에 따른 처리 흐름을 명확하게 표현한다.
유스케이스 실현 - 유스케이스의 실현을 위한 흐름을 시각적으로 표현할 수 있다.
다양한 구성 요소 - 액션, 액티비티, 시작 노드, 종료 노드, 조건 노드, 병합 노드, 객체 노드 등 다양한 구성 요소를 포함한다.
스윔레인 활용 - 액티비티 수행을 담당하는 주체를 구분하는 스윔레인을 통해 더 명확한 역할 분담과 프로세스 흐름을 표현한다.
이미지 | 이름 | 설명 |
---|---|---|
액션 | 더 이상 분해할 수 없는 단일 작업 | |
액티비티 | 여러 개의 액션으로 분리될 수 있는 작업 | |
객체 노드 | 데이터의 흐름을 나타내고 액션 간에 데이터를 전달하는 역할 | |
컨트롤 플로우 | 액션 간의 실행 순서를 나타내는 화살표, 작업의 흐름 제어 | |
객체 플로우 | 객체 노드 간의 데이터 흐름 | |
초기 노드 | 액티비티의 시작점 | |
최종 노드 | 액티비티의 종료점 | |
결정 노드 | 조건에 따라 다른 흐름으로 분기할 수 있는 지점 | |
병합 노드 | 분기된 흐름을 다시 하나로 합치는 지점 | |
분기 노드 | 하나의 흐름을 여러 개로 분기시키는 지점 | |
조인 노드 | 병렬로 실행된 여러 흐름을 다시 하나로 합치는 지점 |
Youtube의 액티비티 다이어그램을 예시로 그려 보았다.
클래스 다이어그램
은 시스템의 구조적인 측면을 나타내며, 클래스 간의 관계와 각 클래스가 가지는 속성 및 메서드를 표현한다.이 다이어그램은 시스템을 구성하는 요소들의 정적인 관계를 보여주며, UML을 사용하여 표현된다.
정적 구조 표현 - 클래스 다이어그램은 시스템의 정적 구조를 모델링하며, 객체, 클래스, 그리고 이들 간의 관계를 시각적으로 표현한다.
클래스 속성 및 연산 정의 - 클래스의 속성(변수)과 연산(메서드)을 정의하며, 이를 통해 클래스의 책임과 기능을 명확히 한다.
객체 지향 설계 지원 - 객체 지향 소프트웨어 설계에 필수적이며, 클래스 간의 상속, 연관, 집합, 의존 등 다양한 관계를 표현한다.
시스템 구조의 문서화 - 시스템의 구조를 문서화하여 설계자와 개발자 간의 의사소통을 용이하게 하며, 시스템의 유지보수와 확장성을 향상시킨다.
코드 생성의 기반 - 클래스 다이어그램은 종종 실제 소프트웨어 클래스와 객체로 변환되어, 코드 생성의 기반으로 사용된다.
이름 | 설명 |
---|---|
클래스 | 공통의 속성, 메서드(오퍼레이션), 관계, 의미를 공유하는 객체들의 집합 |
속성 | 클래스의 구조적 특성에 이름을 붙인 것으로 특성에 해당하는 인스턴스가 보유할 수 있는 값의 범위 |
메소드 | 이름, 타입, 매개변수들과 연관된 행위를 호출하는데 요구되는 제약사항들을 명세하는 클래스의 행위적 특징 |
접근 제어자 | 클래스에 접근할 수 있는 정도 |
접근 제어자는 아래와 같은 것들이 있다.
-
private : 클래스 내부 접근만 허용
+
public : 클래스 외부 접근 허용
#
protected : 동일 패키지/파생 클래스에서 접근 가능
~
default : 동일 패키지 클래스에서 접근 가능
이미지 | 이름 | 설명 |
---|---|---|
![]() | 의존 관계 | 한 클래스가 다른 클래스에서 제공하는 기능을 사용할 때 형성되는 관계(클래스가 다른 클래스에 의존하고 있음을 나타냄) |
![]() | 연관 관계 | 두 클래스가 서로 연결되어 있음을 나타내며, 클래스들이 개념적으로 서로 어떻게 연결되어 있는지를 표현하는 관계 |
![]() | 일반화 관계 | 일반적으로 상속을 나타내며, 하나의 클래스(자식 클래스)가 다른 클래스(부모 클래스)의 모든 특성을 상속받는 관계 |
![]() | 실체화 관계 | 인터페이스와 이를 구현하는 클래스 사이의 관계, 클래스가 인터페이스의 모든 메서드를 구현해야 함을 의미 |
![]() | 집합 관계 | 전체와 부분의 관계를 나타내며, 객체들 간의 생명주기와 소유권을 표현함, 집합 관계는 부분이 전체에 속하지만 독립적인 생명주기를 가짐 |
![]() | 합성 관계 | 집합 관계의 특수한 형태로, 포함하는 사물의 변화가 포함되는 사물에게 영향을 미치는 관계를 표현 |