본문 바로가기
프로그래밍/설계공부

제 5 장. 접근법 사용하기

by 건우아빠유리남편 2009. 7. 23.
반응형

제 5 장. 접근법 사용하기

접근법의 기본 개념

소프트웨어를 개발하기 위한 방법론은 수도 없이 많으며, 각 회사나 조직마다 독자적인 방법론을 가지고 있거나 이미 존재하는 것을 자신의 개발조직이나 프로젝트에 맞게 조금씩 변형해서 사용하고 있다. 또한 개발할 소프트웨어에 대한 애플리케이션 영역(Application Domain)과 사용될 프로그래밍 언어, 플랫폼도 모두 다르다. 이러한 특성 때문에 소프트웨어를 모델링 할 때 초기에 설정해 주어야 할 사항이 많다. 접근법(Approach)은 소프트웨어 개발 방법론이나 플랫폼 등의 특성에 따라 프로젝트의 초기 환경을 설정해 주는 역할을 한다. 사용자들은 프로젝트를 생성할 때 적절한 접근법을 지정함으로써 자신이 의도하는 프로젝트의 폼을 구성할 수 있게 된다.


접근법은 프로젝트를 생성할 때 다음과 같은 작업을 수행한다.

  • 프로젝트에서 사용될 프로파일들을 설정한다. 접근법에서 정의된 프로파일들은 프로젝트 생성시에 자동으로 프로젝트에 포함된다.
  • 프로젝트의 패키지 구조를 결정한다. 이런 패키지의 구조는 대체로 소프트웨어 개발 프로세스 모델에 의존적이다. 예를 들면 4+1 View Model의 접근법을 사용한다면 "Logical View", "Pysical View", "Process View", "Development View" 와 "UseCase View" 등 다섯가지의 패키지가 기본적으로 설정될 것이다.
  • 프로젝트에서 참조할 프레임워크를 설정한다. 프로젝트가 특정 프로그래밍 언어나 플랫폼을 기반으로 한다면 거기에 해당하는 프레임워크를 접근법에 지정하여 프로젝트 생성시에 로딩하게 할 수 있다. 예를 들어 현재 프로젝트가 Java로 개발된다면 JFC(Java Foundation Classes) 프레임 워크를 접근법에서 지정하면 프로젝트 생성시에 패키지로 포함되어 직접 참조할 수 있다.
  • 프로젝트에 기본적으로 포함할 모델 조각을 읽어 들인다.

새로운 접근법을 지원하려면 다음과 같은 절차가 필요하다.

  1. 새로운 접근법을 정의하기 위해 접근법 문서 파일(.apr)을 작성한다.
  2. 접근법 문서 파일을 모듈 디렉토리 하부 계층에 복사한다.

새로운 접근법 작성하기

접근법 문서 파일의 기본 구조

접근법 문서 파일은 XML 문서의 규칙을 따르며, 확장자는 .apr(Approach File)이다. 접근법에 대한 내용은 APPROACH 요소 내에 기술되며, 구문이나 내용에 오류가 없도록 해야 한다.

<?xml version=”1.0” encoding=”...” ?>
<APPROACH version="..."> 
    <HEADER>
        ...
    </HEADER>
    <BODY>
        ...
    </BODY>
</APPROACH>
  • encoding 속성 : XML 문서의 인코딩 속성 값을 지정한다 (e.g. UTF-8, EUC-KR). 이 속성의 값에 대해서는 XML 관련 자료를 참조하기 바란다.
  • version 속성 (APPROACH 요소) : 접근법 문서 포맷의 버전이다. (e.g  1.0)
  • HEADER 요소 : Header Contents 섹션 참조
  • BODY 요소 : Body Contents 섹션 참조

Header Contents

접근법 문서의 HEADER 부분에는 프로파일의 이름과 상세설명 등 프로파일에 대한 개괄적인 정보를 기술한다.

<HEADER>
    <NAME>...</NAME>
    <DISPLAYNAME>...</DISPLAYNAME>
    <DESCRIPTION>...</DESCRIPTION>
</HEADER>
  • NAME 요소: 접근법의 명칭을 기록한다. 이것은 각각의 접근법을 구분하기 위해 사용되는 유일한 이름이다.
  • DISPLAYNAME 요소: New Project 대화 상자에서 사용자에게 보여지는 접근법의 이름이다.
  • DESCRIPTION 요소 : 접근법에 대한 상세한 설명을 기술한다.

Body Contents

접근법 문서의 BODY 부분은 크게 IMPORTPROFILES 요소와 MODELSTRUCTURE 요소로 나뉜다. IMPORTPROFILES 요소에는 프로젝트 생성시에 로딩할 프로파일 이름을 지정하고, MODELSTRUCTURE에서는 프로젝트의 초기 모델구조와 읽어 들일 프레임워크를 기술한다.

<BODY>
    <IMPORTPROFILES>
        <PROFILE>...</PROFILE>
        ...
    </IMPORTPROFILES>
    <MODELSTRUCTURE>
        ...
    </MODELSTRUCTURE>
</BODY>
  • IMPORTPROFILES 요소 : 프로젝트에 포함시킬 프로파일들을 여러 개의 PROFILE요소로 나열한다.
  • PROFILE 요소 : 프로젝트에 포함시킬 프로파일의 이름을 기술한다.
  • MODELSTRUCTURE 요소 : Model Structure 섹션을 참조.

Model Structure

MODELSTRUECTURE 요소에는 프로젝트의 초기 패키지 구조를 표현한다. 이를 위해서 모델(Model), 서브시스템(SubSystem), 패키지(Package)와 프레임워크(Framework)등을 계층적으로 구성한다. 예를 들어 SUBSYSTEM 요소 밑에 다시 모델, 서브시스템, 패키지, 프레임워크 등의 요소를 정의할 수 있다. 프레임워크는 그 자체가 하나의 패키지 요소에 해당되지만 하부에 다른 패키지 요소들을 포함할 수 없다.

다음은 MODELSTRUCTURE 요소에 대한 구문 구조를 정의한 것이다.

<MODELSTRUCTURE>
    model_expression*
</MODELSTRUCTURE>
model_expression ::= model_element
    | package_element
    | subsystem_element
    | import_framework
    | import_model_fragment.
model_element ::= <MODEL name=”...” stereotypeProfile=”...” stereotypeName=”...”>model_expression</MODEL>.
package_element ::= <PACKAGE name=”...” stereotypeProfile=”...” stereotypeName=”...”>model_expression</PACKAGE>.
subsystem_element ::= <SUBSYSTEM name=”...” stereotypeProfile=”...” stereotypeName=”...”>model_expression</SUBSYSTEM>.
import_framework ::= <IMPORTFRAMEWORK name=”...”/>.
import_model_fragment ::= <IMPORTMODELFRAGMENT fileName=”...”/>.
  • name 속성 (MODEL, PACKAGE, SUBSYSTEM 요소) : 각 UML 모델 요소의 이름이다.
  • stereotypeProfile 속성 (MODEL, PACKAGE, SUBSYSTEM 요소) : 각 UML 모델 요소에 적용할 스테레오타입이 정의되어 있는 프로파일 이름이다.
  • stereotypeName 속성 (MODEL, PACKAGE, SUBSYSTEM 요소) : 각 UML 모델 요소에 적용할 스테레오타입의 이름이다.
  • name 속성 (IMPORTFRAMEWORK 요소) : 모듈 디렉토리 밑에 존재하는 삽입할 프레임워크의 이름이다.
  • fileName 속성 (IMPORTMODELFRAGMENT 요소) : 상위 모델 요소에 읽어들일 모델 조각 파일(.mfg) 이름이다.

접근법 문서 예제

다음은 4+1 View Model을 위한 접근법을 예제로 보인 것이다.

<?xml version=”1.0” encoding=”UTF-8” ?>
<APPROACH version="1"> 
    <HEADER>
        <TITLE>4+1 View Model</TITLE>
        <DESCRIPTION>This is an approach to support 4+1 View Model in .NET platform.</DESCRIPTION>
    </HEADER>
    <BODY>
        <IMPORTPROFILES>
            <PROFILE>4+1Profile</PROFILE>
            <PROFILE>CSharpProfile</PROFILE>
        </IMPORTPROFILES>
        <MODELSTRUCTURE>
            <MODEL name=”UseCase View”/>
            <MODEL name=”Logical View”>
                <IMPORTFRAMEWORK name=”dot_net_framework”/>
	   </MODEL>
            <MODEL name=”Development View”/>
            <MODEL name=”Process View”/>
            <MODEL name=”Deployment View”/>
        </MODELSTRUCTURE>
    </BODY>
</APPROACH>

새로운 접근법 등록하기

작성된 접근법을 프로그램에서 인식하려면 접근법을 StarUML™ 모듈 디렉토리(<install-dir>\modules) 하부 디렉토리로 옮겨야 한다. StarUML™은 프로그램 초기화 시에 모듈 디렉토리 하부를 검색하여 모든 접근법 파일들을 읽어들인 후 프로그램에 자동 등록한다. 만약 접근법 파일이 문법에 맞지 않게 잘 못 작성되어 있거나, 확장자가 .apr이 아닌 경우에는 접근법을 정상적으로 읽어 들이지 않고 무시하게 될 것이다.
접근법이 모듈 디렉토리 하부에 존재하면 프로그램에 등록되는 데에는 문제가 없다. 그러나, 가급적이면 다른 모듈들과의 혼동을 피하기 위하여 별도의 서브디렉토리를 만들어 사용하는 것을 권고한다.

노트: 접근법의 아이콘을 등록하려면, 접근법과 동일한 이름의 아이콘 파일(.ico)을 만들어 접근법이 있는 디렉토리에 두면 된다. 접근법 아이콘은 새 프로젝트 대화상자에서 접근법의 이름과 함께 접근법 목록 리스트에 표시된다. 만약 접근법의 이름과 동일한 이름의 아이콘 파일이 없으면 기본 아이콘으로 접근법을 등록할 것이다.

노트: 접근법을 더 이상 사용하지 않으려면 StarUML™ 모듈 디렉토리(<install-dir>\modules) 하부에서 삭제하면 된다.

접근법 관련 메소드 사용하기

시스템에 설치된 접근법 정보 읽기

접근법은 프로젝트 초기 설정을 위한 것이므로 프로그램에서 직접 엑세스 할 일이 거의 없다. 따라서 StarUML에서는 접근법의 조작을 위한 COM 자동화 개체를 지원하지 않는다. 다만 IProjectManager GetAvailableApproachCount()와 GetAvailableApporachAt()를 이용하면 시스템에 설치된 접근법의 개수와 이름들은 가져 올 수 있다.
다음은 접근법 관련 메소드의 호출 형식이다.

IProjectManager.GetAvailableApproachAt(Index: Integer): String
IProjectManager.GetAvailableApproachCount(): Integer

접근법을 사용하여 프로젝트 생성하기

IProjectManager.NewProjectByApproach()를 호출하면 주어진 접근법으로 새 프로젝트를 생성할 수 있다. 파라미터로 입력되는 ApproachName은 시스템에 설치된 접근법 이름 중의 하나가 되어야 한다. 그렇지 않으면 빈 프로젝트를 생성하게 될 것이다. IProjectManagerNewProjectByApproach()의 형식은 다음과 같다.

IProjectManager.NewProjectByApproach(ApproachName: String)

다음는  "UMLComponents" 접근법으로 새로운 프로젝트를 생성하는 JScript 예제이다.

var app = new ActiveXObject("StarUML.StarUMLApplication");
var prjMgr = app.ProjectManager;
prjMgr.NewProjectByApproach("UMLComponents");
반응형

댓글