소프트웨어 시스템이 복잡해지고 대형화되면서 이를 해결하기 위한 여러방법이 연구되고 있다. 객체지향 개발 방법론은 소프트웨어 위기를 극복하기위한 개발방법 중 가장 최근에 나타난 것으로 현재까지 나타난 소프트웨어개발의 문제점을 해결할 많은 장점을 보유하고 있다.
소프트웨어 개발시 나타나는 근본적인 특성은 시스템에 대한 요구사항이계속 변하게 된다는 점이다. 이것은 피할 수 없으므로 시스템은 요구사항 변경을 수용할 수 있어야 하며 이를 위해 유연성과 적응력을 갖도록 설계돼야한다. 그러나 현재까지의 방법으로는 시스템 확장이나 변경이 쉽지 않아 많은 어려움을 겪고 있으며 객체지향기법은 이를 극복할 수 있는 매우 유용한방법으로 인식되고 있다.
객체지향 개발방법은 우리가 태어나면서부터 배워온 객체개념에 기초한다.
인간(객체)은 자라면서 상대방(객체)을 인식하고 그의 속성을 찾아내고 그와의 관계를 알아낸다. 인간이 살아가는 것은 자신(객체)과 다른 사람(객체)과의 관계를 넓혀가는 객체지향과정이라 볼 수 있다.
객체지향 개발방법은 객체(object)와 그의 속성(attribute)과 동작, 유사한 객체의 집합으로 나누어진 클라스, 객체 사이의 관계 등을 기본개념으로한다. 객체지향 개발방법은 객체지향 분석, 객체지향 디자인, 객체지향 프로그래밍, 객체지향 테스팅으로 이어져 소프트웨어 개발 전 과정에 걸쳐 동일한 방법론과 표현기법이 적용될 수 있는 장점을 가진다.
코드(Coad), 유던(Yourdon), 부흐(Booch), 실레어(Shlaer), 멜러(Mellor),럼보(Rumbaugh) 박사 등은 다양한 객체지향 개발 방법론이 제시했으며 여기서는 럼보 박사의 OMT(Object Modeling Technique)를 중심으로 객체지향 방법론을 기술했다.
객체지향 분석기법은 기존의 분석기법에 비해 실세계의 현상을 보다 정확히 모델링할 수 있어 어려운 응용분야에 적용가능하고 분석과 디자인 표현에큰 차이점이 없어 시스템 개발을 용이하게 해준다. 또한 분석, 디자인, 프로그래밍의 결과가 큰 변화없이 재사용될 수 있어 확장이 쉽고 시스템 개발시시제품이나 나선형 패러다임 적용이 가능하다.
구조적 분석기법이 구조적 프로그래밍에서 출발한 것처럼 객체지향 분석기법도 객체지향 프로그래밍과 객체지향 디자인에서 출발한다. 객체지향기법은프로그래밍 기법만이 아니며 시스템 개발에 있어 근본적인 사고의 변환을 요구하는 새로운 기법이다. 객체지향분석은 만들고자 하는 시스템을 객체중심으로 기술하게 되며 이는 우리가 주로 해왔던 하향식(톱다운)과는 근본적으로 다르다. 기존의 많은 시스템들은 기능중심으로 개발되어 왔으며 이를 뒷받침하는 방법이 구조적 기법(structured approach)이다.
구조적 분석기법은 대표적인 하향식 문제 접근방법이다. 소프트웨어 시스템은 세가지(객체·동적·기능) 관점에서 볼 수 있으며 이를 통합하여 소프트웨어를 디자인하는 일은 쉬운 일이 아니다. 객체지향 방법론은 이들을 체계적으로 통합해 유연성과 적응력을 가진 우수한 품질의 소프트웨어를 만들수 있는 최적의 방법으로 여겨지고 있다. 객체지향 방법은 시스템의 요구사항을 분석하기 위해 세가지 모델링기법을 단계별로 적용, 그 결과를 통합하게 된다.
객체 모델링은 시스템에 요구되는 객체들을 보여줌으로써 주로 시스템의정적 구조를 포착하는 데 사용된다. 이 모델링은 정보모델링과 유사하며 앞으로 언급할 세가지 모델링중 객체지향분석기법에서 가장 중요하고 선행되어야 할 것이다. 객체모델링은 시스템 기능에 초점을 맞추기보다는 시스템을구성하는 객체를 강조함으로써 실세계에 더욱 근접한 교훈을 가능하게 하고계속적인 변화에 탄력적으로 대처할 수 있게 해준다.
객체모델링은 시스템의 요구사항을 기술한 문제기술에서 시스템이 요구하는 객체를 추출하게 된다. 객체를 발견한 다음 객체들 사이의 연관성을 찾아내고 이를 정의하기 위한 속성들을 추가하게 된다. 객체모델링에 사용되는도구들은 EER(Enhanced Entity Relation)모델과 유사하다. 객체모델링은 시스템을 구성하는 근본적인 객체를 보여줌으로써 시스템을 이해하는 최선의접근방법이라 인식되며 가장 우선되어야 할 과정이다. 그 다음 시간의 흐름에 따른 객체와 객체 사이의 변화를 조사하게 되며 이를 동적 모델링이라 한다. 동적모델링은 객체 사이의 제어흐름, 상호작용, 동작의 순서 등을 다룬다. 동적모델의 중요한 개념은 상태, 사건, 동작 등이며 객체지향분석의 특징은 시스템에 요구되는 객체를 구한 후 객체의 동적인 면을 찾아내기 위해동적 모델링을 적용한다는 점이다.
동적 모델링 도구로는 상태변이도(State Transition Diagram) 또는 SDL(Specification and Description Language) 등을 사용한다. 상태변이도를 구하는 과정은 우선 문제기술에서 시나리오를 만들게 되며 시나리오는 객체 또는시스템의 한 실행과정을 사건의 흐름으로 표시하게 된다. 기능 모델링은 객체지향 분석기법에서 객체모델링, 동적모델링에 이어 시스템을 기술하는 세번째 단계다. 이 세개의 모델링은 시스템을 설명하는 삼각대의 세 받침다리에 해당하며 객체모델링은 무엇에게 이 일이 필요한지를 보여준다. 동적모델링은 언제, 어떠한 순서로 일이 진행돼야 하는지 보여주는 반면, 기능모델링은 어떤 일이 수행돼야 하는지를 보여주게 된다.
기능모델은 입력값으로부터 계산을 거쳐 어떤 결과가 나타나는지 보여주며이것이 어떻게 유도되었는지의 구현방법은 고려하지 않는다(아직 분석단계임). 기능모델로는 수행돼야 하는 기능을 나타내는 데이터 흐름도(DFD:DataFlow Diagram) 등을 사용할 수 있다.
디자인은 요구사항 분석과정에서 나타난 시스템의 기능과 성능에 대한 목표를 어떻게 제공할 것인가 구체적으로 밝히는 과정이다. 분석과정은 디자인을 위한 시스템 골격을 잡는 것이라 볼 수 있으며 디자인 단계에서는 이 골격에 살을 붙여가게 된다. 요구사항 분석이 응용분야에 초점을 맞추어 사용자의 관점을 대변하는 것이라면 디자인은 컴퓨터의 관점으로 관심을 이동,소프트웨어의 구체적인 모습을 나타낸 것이다.
객체지향분석에 의해 객체·동적·기능 모델링이 이루어졌으며 객체지향디자인은 이들 세개 모델을 통합해 이루어진다. 특히 객체모델링의 결과인 객체모델을 기본으로 디자인이 이루어지며 객체모델링에서 나온 객체의 정적정보에 동적모델링에서 나온 객체의 동작과 사건, 기능 모델의 프로세스들이통합되어 객체 디자인이 이루어진다.
또한 디자인 과정에서 구현에 필요한 내부 객체들이 추가될 수 있다. 디자인 과정에서는 구체적인 세부사항을 추가하고 구현에 필요한 결정을 하게된다. 객체지향프로그래밍은 객체지향디자인의 결과를 컴퓨터가 알아들을 수있도록 객체지향 언어로 표시하는 것이다. 객체지향 분석과 디자인이 제대로이루어지면 객체지향 프로그래밍은 기계적으로 쉽게 이루어진다. 객체지향시스템 구현시 부딪히는 어려움은 대부분 요구사항 분석과 디자인의 잘못에 기인한다. 따라서 객체지향 개발과정에서도 구현 이전의 요구사항 분석과 디자인에 많은 시간과 노력을 들여야 한다.
객체지향시스템의 장점은 객체지향 프로그래밍으로 얻어지는 것이 아니며객체지향의 관점이 시스템에 반영될 때 얻을 수 있다. 또한 객체 지향분석과디자인의 결과가 객체지향 프로그래밍으로 구현될 때 쉽게 프로그램이 이루어지고 객체지향의 효과가 극대화될 수 있다. 많이 사용되고 있는 객체지향언어는 C++,스몰토크 등이 있다.
기존의 방법은 기능모듈을 기본 단위로 생각하였으나 객체 지향방법은 객체를 기본단위로 하여 캡슐화(encapsulation),상속(inheritance),다형성(polymophism) 등의 메카니즘을 제공함으로써 소프트웨어의 복잡도를 줄이고 신뢰성이 높은 시스템을 개발할 수 있게 해준다.
객체지향 테스팅에 기존의 테스팅 방법의 적용이 가능하나 이들 테스트 기법들의 효율적인 적용에는 문제점을 가지고 있다.기존 소프트웨어의 프로시저들의 상호관계는 주로 계층적이고 구조적이었던 반면 객체지형 소프트웨어의 상호작용은 수평적인 관계가 많아 테스팅방법에 수정이 필요하다.
또 객체지향에서 추구하는 상속, 캡슐화, 다형성 등은 새로운 테스팅 방법을 요구하고 있다. 시스템을 만드는 엔지니어의 첫번째 요구조건은 단순히작동하는 시스템을 만드는 것과 시스템을 제대로 만드는 것을 구별할 줄 아는 지혜이다. 직업적인 엔지니어는 시스템의 유지보수를 예측하고 수정이 가능하도록 소프트웨어를 개발해야 한다.
객체지향 방법론이 시스템개발에 적용되면 재사용성이 증가하고 시스템 이해 및 확장이 용이해진다. 객체지향 방법론이 시스템 개발에 적용되면 재사용성이 증가하고 시스템 이해 및 확장이 용이해진다. 객체지향 개발방법은소프트웨어 공학의 목적인 고품질의 소프트웨어를 얻을 수 있는 바른 기법이며 수정(modification), 이해(understanding), 재사용(reusability)을 용이하게 만들어 주어 많은 개발 분야에 확산되어 나가고 있다.
尹淸 /충남대학교 컴퓨터 과학과 교수
약력
79년 서울대 물리학과 졸업
83년 미국 웨인주립대 강사
85년 미국 노스웨스턴대 강사
88년 노스웨스턴대 전산학박사
88년 미국 벧연구소 선임연구원
93년∼현재 충남대 컴퓨터과학과 교수