본문 바로가기
컴퓨터과학[4-1]/소프트공학

소프트웨어 공학 - [제15강] 기타 다이어그램(컴포넌트, 패키지, 배포 다이어그램)

by boolean 2017. 1. 6.
728x90

소프트웨어 공학 - [제15강] 기타 다이어그램(컴포넌트, 패키지, 배포 다이어그램)

주요용어

컴포넌트: 기능을 구현하여 인터페이스를 제공하는 소프트웨어 부품으로 시스템을 구성하는 물리적 요소

재사용: 자주 사용되는 기능을 클래스나 서브시스템으로 만들어 필요할 때 사용하는 것

패키지: 관련성이 있는 UML 요소들을 하나의 그룹으로 만들기 위한 컨테이너

배포 다이어그램: 실행 상황에서 노드들의 구성을 보여주고 소프트웨어 요소들이 실제로 어떤 하드웨어에 배치되어 실행되는 지를 보여줌


개요

컴포넌트 다이어그램

캡슐화된 클래스와 인터페이스, 그리고 그들의 관계를 보여줌

시스템이 작은 부분들로 이루어져 있음을 구현 관점에서 보여줌

컴포넌트는 시스템의 구성 요소로서 ‘관리되고 재사용 가능하며 대체될 수 있는 실행 가능한 소프트웨어 조각’임

패키지 다이어그램

클래스나 컴포넌트들을 그룹화시켜 구조화함

패키지 간의 의존성을 알아야 하며 Java의 패키지나 C#의 네임스페이스와 유사

배포 다이어그램

소프트웨어 조각들이 실제로 어떤 하드웨어에 배치되어 실행되는지를 보여줌

시스템의 물리적 뷰에 해당


컴포넌트 다이어그램

컴포넌트와 컴포넌트 다이어그램

컴포넌트는 재사용 가능한 소프트웨어 조각

C#의 dll 파일이나 Java의 jar 파일이나 class 파일과 같으며 대개 하나 이상의 클래스나 객체로 구현됨

컴포넌트 다이어그램은 클래스나 컴포넌트의 인터페이스를 중심으로 한 사용 관계를 다룸.

컴포넌트를 블랙박스로 볼 수 있음

반면에 클래스 다이어그램은 클래스의 내부 속성이나 메소드를 다룸

컴포넌트 다이어그램은 클래스 다이어그램보다 추상 수준이 높으며 서브시스템들의 상관관계나 복잡도를 파악하는데 유용함

특정 컴포넌트의 내부 구성을 보여주는 화이트박스 관점의 컴포넌트 다이어그램도 있으며

어떤 클래스나 컴포넌트 및 인터페이스를 사용하여 구현되었음을 보여줌

컴포넌트

캡슐화된 소프트웨어 부품으로 재사용 단위

자주 사용되는 기능이 모듈화된 것

컴포넌트 기반으로 소프트웨어를 만든다는 것은 작은 단위의 컴포넌트들을 묶어 조립하는 것

컴포넌트의 크기는 하나의 클래스에서 서브시스템에 이르기까지 다양함

컴포넌트의 예는 이메일 모듈, 업로드 모듈, 파서, 데이터베이스 모듈 등

컴포넌트의 의미와 표기법은 클래스와 유사함

다른 컴포넌트나 클래스와 상속 관계를 가질 수 있음

인터페이스를 구현할 수 있고, 속성과 메소드를 가질 수 있음

컴포넌트들 간의 결합이 약해야 변경의 파급 효과가 줄어들고 유지보수가 쉬어짐

UML에서 컴포넌트 표기법

《component》스테레오 타입을 사용하거나 컴포넌트 아이콘을 표시함

서브시스템이 컴포넌트가 되는 경우에는 《subsystem》을 사용

컴포넌트의 인터페이스

컴포넌트의 인터페이스는 다른 부분과 결합되는 부분

제공 인터페이스(provided interface)

컴포넌트가 기능을 구현하고 외부에 그러한 서비스를 제공하는 것

외부의 다른 컴포넌트가 이 인터페이스를 통해 기능을 사용하게 됨

요구 인터페이스(required interface)

컴포넌트가 정상적으로 동작하기 위해 필요로 하는 기능 및 서비스

이것을 구현한 외부의 컴포넌트가 필요하며, 이것은 외부 컴포넌트 입장에서는 제공 인터페이스임

표기법

막대 사탕 표기법(Ball and Socket Notation)

예) Query와 StoredProc은 제공 인터페이스이며 DataSource는 요구 인터페이스

다른 표기법이 있으며 《interface》를 사용하고, 제공 인터페이스는 구현을 의미하는 점선의 상속 관계로 연결하며, 요구 인터페이스는 의존 관계로 연결함

컴포넌트 연결

요구 인터페이스를 필요로 하는 컴포넌트와 그 인터페이스를 구현해 주는 다른 컴포넌트와 연결하는 것

예)DataSource라는 인터페이스를 제공한다면 어떠한 데이터베이스라도 상관없이 DBHelper가 사용할 수 있음. 

Query와 StoredProc를 이용하여 DBHelper를 사용할 수 있음

컴포넌트의 내부 구조 명세

컴포넌트의 내부 구성 정보를 명세하는 것으로 컴포넌트를 구성하는 요소들을 포함시키고 그들의 관계를 표시

포트(port)는 컴포넌트 내부에 존재하는 요소들과 컴포넌트의 제공/요구 인터페이스와의 관계를 맺어주는 지점으로 컴포넌트의 경계에 속이 빈 작은 사각형으로 표시

위임 연결자(delegation connector)

컴포넌트의 내부 요소와 포트를 연결해 주는 화살표

컴포넌트를 사용하는 과정에서 발생하는 메시지의 흐름을 표현

제공 인터페이스의 사용 요청이 오면 포트를 통해 내부 구현 요소로 들어옴

외부 컴포넌트를 사용하는 요구 인터페이스는 포트를 통해 요청 메시지가 나감


배포 다이어그램

배포 다이어그램하드웨어, 소프트웨어 요소 및 환경을 명세

실행 상황의 아키텍처를 보여주는 물리적 뷰

실행 파일이나 라이브러리 파일과 같은 소프트웨어 요소와 이것을 실행하는 하드웨어를 시각적으로 보여줌

소프트웨어 요소의 물리적 배치를 모델링하기 위해 사용됨

시스템 설계 단계에서는 물리적 배치를 결정하기 어려우나 개략적인 구조를 고려해 줌

노드

구성 요소들을 동작시키기 위해 필요한 환경을 제공하는 하드웨어 또는 소프트웨어

노드는 실행 시간에 존재하는 물리적 요소로 실행에 필요한 자원을 표현

대부분의 경우 노드는 하드웨어지만 운영체제, 웹 서버, 응용 서버 등은 실행 환경을 제공하는 노드가 될 수 있음

표기법

육면체로 표시하며 하드웨어의 경우 《device》스테레오 타입을 사용

《computer》,《server》,《printer》등을 사용할 수 있음

적당한 아이콘을 우상단에 표시할 수 있음

예) ApplicationServer라는 실행 환경이 MyServer 노드에 배치된 상태

예) 동일 유형의 노드들을 표현하는 경우. 노드 인스탄스를 나타내려면 밑줄을 그어줌

소프트웨어 구성 요소(artifact)

노드는 실행 파일이나 라이브러리와 같은 소프트웨어 요소를 포함할 수 있음

exe, dll, class 파일 및 Java와 C의 소스 파일 그리고 xml, txt 파일 등의 모든 물리적 파일

소프트웨어 요소를 표시하기 위해 《artifact》 스테레오 타입을 사용하거나 아이콘을 표시함

《deploy》 스테레오 타입을 가지는 의존 관계로 나타낼 수도 있음

노드 연관

노드들 간의 통신을 표현

예) 노트북 컴퓨터 안의 응용 프로그램이 서버로부터 TCP/IP를 이용하여 자료를 요청하는 경우


패키지 다이어그램

패키지와 패키지 다이어그램

관련 있는 UML 요소들을 그룹으로 만들어 구조화시킴

대부분의 UML 요소들에 적용할 수 있음

예를 들어 논리적 연관성이 있는 클래스들을 묶어 관리할 때와 Java의 패키지나 C#의 네임스페이스를 표시할 때 패키지 다이어그램은 패키지들과 패키지 간의 의존 관계를 표현함

패키지 표기

탭이 달린 사각형으로 표시하며 파일 폴더와 유사함

구성 요소들을 패키지 안에 포함시키거나 포함 관계를 표시하여 표현함

패키지 안의 요소를 표현하는 방법

예) MyPackage::MyClass

예) MyPackage::MyAnotherPackage::MyAnotherClass

하나의 패키지 안에서 다른 패키지를 참조하려면 절대 경로(qualified name)를 사용해야 함

접근 제어

패키지에 포함된 요소들에 대한 접근 범위를 표시

private 요소는 패키지 내부에서만 

public 요소는 어디서나 사용 가능의존 관계

한 패키지가 다른 패키지를 사용하는 관계

패키지의 변경은 이것에 의존하는 다른 패키지에 영향을 줌

유지보수성을 고려하면 순환 고리 형태의 의존 관계를 제거해야 함

특수한 의존 관계

《import》

import 하는 패키지의 요소들에서 import 되는 패키지의 요소들을 사용

import가 선언되면 패키지 이름을 명시하지 않고 요소의 이름만으로 참조할 수 있음

《import》관계가 연속으로 발생하는 경우에 《import》는 public 성격을 지님

import 되는 요소들은 import 하는 패키지에서 public 요소가 됨

예) YourPakcage는 MyPackage를 통해 TheirPackage 까지 접근

《access》

《access》는 private 성격의 《import》임

import 되는 요소들은 import 하는 패키지에서 private 요소가 됨

예) YourPakcage는 MyPackage를 통해 TheirPackage에 접근할 수 없음

01
분산 환경하에서 시스템을 구성하는 하드웨어와 소프트웨어 요소들이 물리적으로
어떻게 배치되는가를 보여주는 UML 다이어그램은 무엇인가?
1 컴포넌트 다이어그램 2 패키지 다이어그램
3 클래스 다이어그램
4 배포 다이어그램
정답 | 4
해설 | 시스템을 구성하는 물리적 요소들의 배치를 보여준다. 4+1 뷰에서 물리적 뷰에 속
하며 시스템의 설계 결과가 실세계의 개체로 어떻게 대응되는지를 보이는 것이다.
02
컴포넌트의 특성을 설명한 것을 잘못된 것은?
1 독립적으로 개발되어 배포될 수 있는 단위이다.
2 잘 정의된 인터페이스를 가져야 한다.
3 바이너리 레벨이 아닌 소스 레벨의 재사용 부품이다.
4 일반적으로 하나 이상의 클래스들로 구현된다.
정답 | 3
해설 | 컴포넌트는 소스 수준이 아닌 바이너리 수준의 재사용 부품을 말한다. 3자로부터 컴
포넌트를 구입할 때 일반적으로 소스 코드가 제공되지 않으므로 유지보수에 문제가 될 수
있다.
03
다음 그림에 관한 설명으로 맞지 않는 것은?1 DataSource는 인터페이스이다.
2 DBHelper는 DataSource의 사용자이다.
3 MySQLDB는 DataSource의 제공자이다.
4 Query와 StoredProc은 DBHelper의 요구 인터페이스이다.
정답 | 4
해설 | Query와 StoredProc은 DBHelper의 제공 인터페이스이다.
04
다음 UML 다이어그램에 관한 설명으로 잘못된 것은?
1 노드는 구성 요소들의 동작 환경을 제공하는 하드웨어 또는 소프트웨어에 해당함
2 노드들 간의 통신을 표현함
3 소프트웨어 요소가 실제로 어떤 하드웨어에 배치되어 실행되는지 보여줌
4 소프트웨어 패키지 간의 의존 관계를 표현함
정답 | 4
해설 | 패키지는 탭이 달린 사각형으로 표시된다.
05
다음과 같은 UML 다이어그램을 무엇이라 하는가?
1 패키지 다이어그램
2 클래스 다이어그램
3 컴포넌트 다이어그램 4 배포 다이어그램
정답 | 1
해설 | 두 개의 패키지와 그들 간의 《import》 관계를 보이고 있다.
06
UML로 security 패키지에 포함된 Credentials 클래스를 완전히 표시한다면 무엇
인가?
1 security.Credentials 2 security::Credentials
3 Credentials.security 4 Credentials::security
정답 | 2
해설 | Java 언어에서는1과 같이 도트(.)로 구분한다. UML에서는 두 개의 콜론(::)으로 구
분한다.
정리하기
01
컴포넌트란 무엇인가?
캡슐화되어 기능을 구현하여 캡슐화한 소프트웨어 부품이다. 일반적으로 하나 이상의 클래
스들을 포함하며 제공 인터페이스와 요구 인터페이스를 가진다. 컴포넌트는 물리적 바이너
리 파일로 jar 파일이나 dll 파일이 컴포넌트에 해당한다.
02
컴포넌트의 제공 인터페이스란 무엇인가?
컴포넌트가 기능을 구현하고 이것을 외부에서 사용할 수 있게끔 노출한 인터페이스이다.
03
배포 다이어그램에서 노드란 무엇인가?
노드는 실행 시간에 존재하는 물리적 자원으로 대개 하드웨어를 의미하지만 운영체제, 웹
서버, 응용 서버 등도 실행 환경을 제공하는 노드가 될 수 있다. 즉 구성 요소들을 동작시
키기 위해 필요한 환경을 제공하는 하드웨어 또는 소프트웨어이다.
04
소프트웨어 구성 요소(artifact)란 무엇인가?artifact는 배포 다이어그램의 노드 상에 존재하는 물리적 소프트웨어 요소로 실행 파일, 라
이브러리 파일, 프로그램 소스 파일이나 데이터 파일 또는 문서 파일 등이다.
05
패키지 간의 관계에서 《import》와 《access》를 구분하라.
패키지 B가 C를 import하면 B는 C의 모든 public 요소에 접근할 수 있으며, 이러한 요소
들은 B에서 public 요소로 작용한다. 만약 A가 B를 import하면 B를 통하여 C의 모든
public 요소에 접근할 수 있게 된다. 그런데 패키지 B가 C를 import하지 않고 access한다
면 C의 모든 public 요소들은 B에서 private 요소로 바뀐다. 따라서 A가 B를 import하더라
도 C의 public 요소에 접근할 수 없다.


댓글