소프트웨어를 개발할 때는 설계가 굉장히 중요합니다.
만약 여러분이 큰 돈이 오고 가는 대규모 프로젝트를 진행한다고 했을 때, 설계도 하지 않은 채 개발을 시작하게 된다면 어떨까요? 개발 하다가 오류가 생길 수도 있고, 프로그램 구조도 바꿀 수도 있으며 오류에 헤매게 됩니다.
그렇게 된다면 시간은 줄어들고 개발을 하면 할수록 엉망이 됩니다. 또한 고객의 요구사항을 담지 않은 엉뚱한 걸 만들 수도 있고 코드가 엉망이라 유지보수 또한 힘들어집니다. 이러면 진행하고 있는 프로젝트를 날리는 상황이 생기겠죠.
개발은 사람이 하는 것이기 때문에 설계 없이 무작정 개발에 들어가면 위와 같이 프로젝트를 실패할 확률이 높습니다. 이러한 설계에 쓰이는 게 UML 다이어그램입니다.
UML은 Unified Modeling Language의 약자로 시스템 분석가, 의뢰인, 프로그래머 등 개발 과정에 참여한 모든 사람들이 각자의 시점에서 이해할 수 있는 다방면의 설계도를 그릴 수 있는 표준과 시스템을 여러가지 시각에서 볼 수 있는 뷰를 제공합니다. UM은 프로그램을 단순화 시켜 표현하여 의사소통 하기 좋고 대규모 프로젝트 구조의 로드맵을 만들거나 개발하기 위한 시스템 구축에 기본을 마련합니다.
각각의 UML 다이어그램은 나타낼 시스템을 하나로 보여줄 수 있는 수단을 제공해야 하는데요. 각자가 만드는 시스템이 다르듯이 원하는 것도 각자 다르기 때문에 모든 참여자를 만족 시키기 위해서 종류가 많습니다.
시스템을 구성하는 클래스들 간의 관계를 나타낸 다이어그램입니다. 클래스들 간의 존재하는 정적인 관계를 다양한 방식으로 표현하는데요. 객체 지향 시스템 모델링에서 가장 공통적으로 많이 쓰이는 다이어그램이며 바로 프로그램 코드로 변환 가능하다는 장점이 있습니다.
클래스 다이어그램은 위와 같이 표현합니다. 클래스의 고유한 이름을 나타내는 클래스 이름, 클래스의 데이터를 나타내는 특성 및 속성, 클래스의 행위적 특징을 나타내는 메소드로 구성되어 있습니다.
시퀸스 다이어그램이라고도 불리는 순차 다이어그램은 객체들끼리 주고 받는 메세지의 순서를 시간의 흐름에 따라 보여주는 다이어그램입니다. 일반적으로 화면 요구사항과 클래스 다이어그램 기반으로 작성됩니다.
순차 다이어그램의 특징은 아래와 같습니다.
순차 다이어그램은 이렇게 구성되어 있습니다.
메세지를 송수신하는 객체, 상호 작용에 참여하는 오브젝트인 라이프라인, 객체가 동작하고 있음을 표현하는 활성 박스와 서로 다른 객체 간의 상호 작용 혹은 의사소통을 정의하는 요소인 메세지로 표현됩니다.
다이어그램 중에서도 실제 프로젝트에 많이 사용되는 유스케이스는 시스템과 사용자의 상호작용을 다이어그램으로 표현한 것으로 사용자의 관점에서 시스템 서비스 혹은 기능 및 그와 관련한 외부 요소를 보여주는 다이어그램입니다. 사용자가 시스템 내부에 있는 기능 중에서 어떤 기능을 사용할 수 있는지 나타낼 수 있고 유스케이스 다이어그램을 사용함으로써 고객과 개발자가 요구사항에 대한 의견을 조율할 수 있습니다.
유스케이스는 시스템, 액터, 유스케이스, 관계로 이루어져 있습니다.
실제 제가 프로젝트에 사용했던 다이어그램 중 일부분인데요. 시스템은 만들고자 하는 프로그램으로 유스케이스들을 둘러싼 큰 사각형을 의미합니다. 액터는 시스템 외부에 있고 시스템과 상호작용하는 사람으로 원과 선으로 이루어진 사람 모양입니다. 유스케이스는 사용자 입장에서 바라본 시스템의 기능으로 타원으로 표시합니다. 유스케이스들을 연결한 선들은 관계를 뜻하며 액터와 유스케이스 사이의 의미있는 관계를 나타냅니다.
관계에는 액터와 유스케이스 간에 상호작용이 있을 때 표시하는 연관 관계, 포함 관계, 확장 관계, 일반화 관계가 있습니다.
추가적으로 좋은 앱이 있는데요. 이 프로그램을 통해 복잡한 UML 다이어그램을 간단하게 그릴 수 있습니다.