모델(Model)은 소프트웨어 개발에 훌륭한 안내자 역할을 할 수 있습니다. 그렇지만 모델은 그저 모델일 뿐입니다. 즉, 아무리 자세한 모델도 실제 소프트웨어를 정확하게 나타낼 수는 없죠. 모델은 근본적으로 실제 현상이나 사물을 단순화 시킨 것입니다. 실물과 정확히 똑같은 모델을 만들었다고 하면 그것은 이미 모델이 아니죠.
또 한가지, 모델은 잘된 것인지 아닌지 판별하기가 상당히 힘듭니다. 모델에는 모델링 작업을 수행한 모델러(Modeler)의 가치관이 반영되기 때문에 객관적으로 이를 평가하기란 결코 쉬운 일이 아닙니다. 다수의 사람들에게 자동차의 모형을 요구하면, 그들은 각각 서로 다른 모형을 만들어낼 것입니다. 자동차의 외관에 관심이 많은 사람은 디자인과 색상 등을 정확하게 묘사하기 쉽고, 내부구조에 관심이 많은 사람은 내부 구성도를 그려낼 수도 있습니다. 그렇지만, 이들 중 어떤 것이 잘된 것이라고 평가하는 일은 쉬운 것이 아닙니다.
모델링을 하는데 있어서 위의 두 가지 특성 즉, 태생적인 단편성이나 주관적 특성을 잘 이해하고 있어야 합니다. 복잡한 소프트웨어를 개발하는 프로젝트일수록 모델의 단순함을 극복하기 위해 다양한 묘사를 제공하는 다수의 모델이 필요할 수 있습니다. 또한, 해당 소프트웨어의 사용자가 다수이고, 개발자 역시 많다고 하면, 참여자의 필요에 맞는 특정 모델이 요구됩니다. 따라서, 많은 이해관계자가 결부된 프로젝트의 경우에는 다양한 관점을 반영한 모델이 제시되어야 하는 것입니다.
우리가 이제 배우게 될 UML에는 다년간 연구의 축적으로 이러한 모델링에 대한 깊은 이해가 녹아 있다고 볼 수 있습니다.
다양한 계층의 언어들
JAVA, C++, Python, XML, IDL, HTML, WML, UML,… 정말 실로 수많은 언어들이 있습니다. UML에 대해 전혀 무지한 사람들 중에는 UML과 XML 등을 어떤 비슷한 것이겠거니 생각할 수도 있을 것입니다. 이에 따라서 UML에 대해 본격적으로 살펴보기에 앞서 UML이 어떠한 계층에 위치하는 언어이며 어떠한 용도로 쓰이는 것인지를 확실히 하기로 하죠.
우리가 살아가는 세상에 수많은 언어가 존재하는 것처럼 프로그래밍 세계에도 수많은 언어가 존재합니다. 일반적으로 프로그래밍 언어라고 하면 BASIC, COBOL, C, C++, JAVA와 같은 것들을 떠올립니다. 이들 3세대 언어는 컴파일러를 이용하는 언어들인데, 이는 기계어나 어셈블리 등과 같은 1,2세대 언어와 SQL과 같은 4세대 언어와 함께 일반적인 프로그래밍 언어로 분류됩니다. 이들은 어떠한 처리를 수행하게 하는 언어들이죠.
웹의 발전에 따라 표현을 위한 언어인 HTML(Hyper Text Markup Language)이 등장합니다. 이는 데이터의 처리보다는 주로 어떻게 화면에 보여질 것인가 하는 표현을 나타내는 언어입니다. 네트워크의 발전이 계속되면서 데이터의 구조화와 원활한 데이터 교환을 위한 언어인 XML(Extensible Markup Language)이 등장했으며, 서로 다른 프로그래밍언어로 작성된 객체간의 통신을 위해 IDL(Interface Definition Language) 같은 언어가 등장하기도 합니다.
이들 언어들은 프로그램의 처리를 위한 언어와는 분명히 구분되는 것들 입니다. 계층 혹은 위치하는 레이어(Layer)가 다르다고 볼 수 있죠. 가령, HTML과 같은 경우에는 서버상에서 주로 구동 되는 프로그램과 달리 사용자의 컴퓨터로 다운로드 되어서 어떻게 브라우저에 데이터를 표현할 것인가를 처리하는 언어입니다. XML 역시 프로그래밍 언어와 달리 데이터를 구조적으로 담아내는 일을 처리하고, IDL은 이미 프로그래밍 언어로 만들어진 프로그램 간의 의사소통을 위한 언어로서의 역할을 지니는 것입니다.
UML(Unified Modeling Language)은 이름처럼 모델링을 위한 언어입니다. 즉, 모델을 표현하기 위한 도구들과 기법의 집합이라 할 수 있는 언어죠. 그러나, UML과 프로그래밍 언어는 사용되는 계층이 다른 것이지 전혀 무관한 것은 아닙니다. UML이 설계를 위한 모델링 언어라면, 프로그래밍언어는 실제 구현을 위한 언어죠. 설계와 구현은 전혀 다른 작업은 아닙니다. 설계의 결과물인 모델에 따라 구현이 이루어는 것이죠. 만일 설계된 것이 어떠한 방법으로 구현되는지 명확히 제시된다면 UML로 표기된 모델을 프로그래밍언어로 변환할 수 있을 것입니다. 실제로 Rational Rose와 같은 CASE 도구는 이러한 일을 할 수 있는 소프트웨어 개발 도구입니다.