아직 사용은 안해봤지만 우선 보기 쉬운 UI가 맘에 든다..
사용기는.. 사용해보고... 아직 사용안해봤음 --;;
http://www.icescrum.org/
1.99달러라는 가격때문에 지르지는 않았지만..
나름 개발자 냄새를 품기며 잘만들어진 어플이라는게 보이는 어플
남들이 만드는 어플만 볼게 아니라 이젠 내가 만들어야 하는데 ;;
보드타고 노느라 정신줄 놨으니 ㅠㅠ
http://www.domain17.net/walkietalkie/
○ 기능
- 덤프 파일을 분석하여 분석 정보를 txt 파일로 남겨줍니다.
- 덤프 파일 이름 앞에 콜스택 최상위 함수 이름을 붙여줍니다.
- 최근에 수집된 덤프 파일 목록을 이메일로 알려줍니다. (저희는 하루에 한번씩 자동으로 리포트하도록 해놓고 씁니다)
○ 필요 사항
- WinDbg가 설치되어 있어야 합니다. (Debugging Tools for Windows 를 다운받아서 설치)
- .NET Framework가 설치되어 있어야 합니다.
- 리포트 이메일을 보내려면 SMTP 서버가 있어야 합니다. 이메일 보내기를 사용하지 않으면 필요하지 않습니다.
○ 사용 방법
- dmp 파일이 있는 경로에서 바로 DumpAnalyzer.exe 를 실행하거나 인자로 덤프 파일이 있는 대상 경로를 지정하면 됩니다.
- 자세한 사용 방법은 'DumpAnalyzer /?' 라고 실행하면 나옵니다.
간단히 써보시려면 그냥 여기 실행파일만 가져다 쓰셔도 됩니다만, 좀 더 자신의 프로젝트에 맞춰 사용하려면 소스에서 Config.cs 의 내용을 적당히 수정해서 사용하시면 됩니다.
또, 혹시나 이것보다 더 좋은 툴이 공개되어 있으면 제보 바랍니다. 저희도 그거 쓰려구요. :)
지난해 삼성전자와 T옴니아를 선보인 SK텔레콤은 여세를 몰아 올해도 마이크로소프트(MS) 윈도 모바일 운영체제(OS)를 탑재한 소니 에릭슨 엑스페리아, HTC 터치 다이아몬드 출시를 예고하고 있다. 소문으로만 떠돌던 애플 아이폰도 올해는 국내에 상륙할 것으로 관측되고 있다.
미국과 유럽에 이어 한국도 거물급 스마트폰들의 격전지로 떠오르고 있는 것이다. 이에 따라 스마트폰의 강점중 하나인 모바일 인터넷 활성화에 대한 기대감도 고조되는 분위기다.
스마트폰은 기존 휴대폰이 제공하는 웹 브라우징과 비교해 다채롭고 풍부한 콘텐츠에 접근이 가능하다. 단순 검색이나 브라우징을 넘어 이메일, 지도, 날씨 등 다양한 애플리케이션 프로그램을 설치한 뒤 PC와 맞먹는 인터넷 환경을 경험할 수 있다.
삼성전자가 2007년 블랙잭을 선보인 이후 국내 비즈니스맨들 사이에서도 스마트폰에 대한 많은 노하우가 공유됐고 이제 일반 사용자들도 어려움없이 스마트폰을 사용할 수 있을 만큼 각종 프로그램 및 정보가 인터넷 커뮤니티를 통해 공유되고 있다.
스마트폰을 통해 국내에서 써볼만한 모바일 인터넷 서비스를 정리해봤다.
■ 스마트폰을 통한 인터넷 연결
스마트폰을 통해 인터넷에 연결하는 방법은 쉽다. 국내의 경우 아직은 대부분 윈도 모바일 기반 스마트폰인 만큼 윈도를 사용할때처럼 시작 버튼을 누른 뒤 익스플로러 아이콘을 클릭하면 자동으로 인터넷에 연결된다.
스마트폰에 무선랜 기능이 있다면 주변에 있는 무선랜을 찾아 연결된다. 무선랜이 없을 경우 각 통신사의 인터넷 서비스에 자동으로 연결, 인터넷을 사용할 수 있다. 연결되면 PC와 마찬가지로 주소창에 원하는 주소를 입력하면 해당 페이지로 연결된다.
■ 스마트폰 전용 인터넷 사이트
스마트폰 특성상 일반 인터넷 홈페이지를 한 화면에 보여주기는 힘들다. 인터넷 브라우저별로 확대 축소 기능 등을 제공하지만 스마트폰 전용 사이트를 이용하는게 상대적으로 편리하다. 이미 국내 포털들외에 많은 사이트들은 스마트폰 및 모바일용 홈페이지를 운영하고 있다.
|
네이버 모바일 (http://m.naver.com)
네이버에서 제공하는 휴대폰 및 스마트폰 전용 홈페이지 네이버모바일은 작은 화면에서도 뉴스, 블로그, 메일 증권들을 쉽게 확인할 수 있다. 특히 네이버의 간판 서비스 지식인도 바로 쓸 수 있다.
다음 모바일(http://m.daum.net)
다음도 휴대폰 및 스마트폰 전용 홈페이지로 다음 모바일을 제공하고 있다. 다음 모바일은 메일, 검색, 뉴스, 증권, 티스토리 블로그까지 한곳에서 확인할 수 있다. 특히 PC와 모바일 화면으로 쉽게 전환이 가능하며 클릭하기 쉬운 스크롤 버튼도 제공한다.
|
버스운행정보 시스템(http://mobile.bus.go.kr/pda/)
서울시는 실시간으로 버스 운행 정보 및 도착 예정시간을 제공하는 스마트폰용 버스운행정보 시스템 사이트를 운영 중이다. 각 정류장 별 운행 노선과 목적지까지 버스를 이용한 최단경로, 실시간 버스 위치 안내 정보 등을 제공중이다. 개인 아이디를 통해 로그인하면 자주 이용하는 버스를 등록, 도착시간을 실시간으로 확인할 수 있는게 눈에 띈다.
|
대법원 모바일 홈페이지 (http://www.scourt.go.kr/pda/)
대법원도 스마트폰 사용자를 위해 실시간으로 새 소식을 제공하고 있다. 판례 속보 및 사건검색 기능도 제공한다.
|
■ 스마트폰과 어울리는 인터넷 애플리케이션
스마트폰은 인터넷과 연동되기 때문에 일반 휴대폰에는 없는 기능들도 누릴 수 있다. 특히 지도나 사전, 뉴스, 동영상 검색 등 많은 데이터나 최신 정보가 필요한 서비스들은 인터넷과 연동해 더 큰 효과를 볼 수 있다.
아웃룩 모바일
아웃룩 모바일은 PC에서 사용하던 아웃룩 환경을 스마트폰에서도 그대로 사용할 수 있도록 하는 애플리케이션이다. 오피스 아웃룩과 동일하게 실시간으로 메일을 확인할 수 있고 메일 작성도 가능하다. 윈도 모바일에 기본 설치돼 있어 쉽게 사용이 가능하다.
|
트루 맵
트루 맵은 스마트폰을 통해 포털에서 제공하는 지도를 온라인으로 확인할 수 있게 하는 애플리케이션이다. 현재 다음, 야후, 네이버, 구글, 파란 지도를 지원하고 있다. 향후 오픈 API를 이용한 기능, A-GPS와 연동 현재 위치를 표시하는 기능 등이 추가될 예정이다. 개발자 블로그(http://truemobile.tistory.com/)에서 내려 받아 사용할 수 있다.
|
SBSH 웨더
'SBSH 웨더'는 스마트폰으로 전세계 현재 날씨 및 기상예보를 확인할 수 있는 애플리케이션이다. 윈도 모바일 초기화면에 표시돼 실행 절차 없이 바로 날씨를 확인할 수 있다. 인터넷과 연동, 실시간으로 날씨를 업데이트 받을 수도 있다. SBSH홈페이지(http://www.sbsh.net) 에서 체험판을 내려 받아 사용하면 된다.
|
모바일 피쉬
모바일 피쉬는 국내에서 개발된 애플리케이션으로 스마트폰에서 실시간으로 RSS피드를 받아 볼 수 있게 해준다. 스마트폰에 최적화된 사용자 인터페이스를 제공하며 자동검색을 통해 관심 있는 뉴스나 블로그를 등록해 놓으면 시간과 장소에 구애 받지 않고 최신 정보를 확인할 수 있다.
홈페이지(http://www.3fishes.co.kr/)에 베타버전을 무료로 내려 받아 사용할 수 있다.
|
스카이프 모바일
휴대폰에서 인터넷 전화를 쓸 경우 일반 휴대전화에 비해 요금이 저렴하다. 무선랜이 지원되는 장소라면 인터넷 정보이용료 없이도 사용할 수 있다. 스카이프 (http://www.skype.com/)에서 내려 받아 사용할 수 있다.
|
난이도 : 초급
Donald Bell, IT Specialist, IBM
2004 년 2 월 16 일
본 기사에서는 UML 시퀀스 다이어그램에 대한 자세한 소개와 UML 2.0 스펙에 포함된 몇가지 새로운 표기법을 소개한다.

그동안 여러분들이 들어왔던 UML의 새로운 스팩인 UML 2.0의 변경 사항들을 설명할 때가 되었다. 이 새로운 스팩은 중요하기 때문에, OMG의 UML 1.4 스팩에서 UML (UML 2)의 Adopted 2.0 Draft Specification으로 관심의 초점도 옮겨야 할 것이다. UML 2.0 Draft Specification은 미래 스팩들의 견인차 역할을 할 것이다.
OMG가 UML을 개선했던 두 가지 이유가 있다. 주요한 이유는 UML 모델이 Model Driven Architecture (MDA)를 다루기를 바랬기 때문이다. 즉 UML이 모델 중심의 표기법으로서 쓰여야 한다는 것을 의미한다. 또한 UML 1.x 표기법 세트는 큰 애플리케이션에 적용하기 어려웠다. 한편으로는 다이어그램을 보다 읽기 쉽도록 만들기 위해서는, 표기법 엘리먼트들이 개선될 필요도 있었다. (예를 들어, UML 1.x에서의 논리적 흐름을 모델링 하기는 너무 복잡했고, 때로는 불가능했다. UML 2에서 시퀀스 다이어그램의 표기법 변화는 로직 시퀀스 모델링에 대단한 발전을 가져왔다.)
"UML 2.0 Draft Specification 채택하기" 라는 말에 주목해 보자. 이 스팩은 여전히 초안(draft) 단계이다. 하지만 Draft Specification은 OMG가 채택했다. OMG는 완전해 지기 전까지는 새로운 표준을 채택하지 않는 컨소시엄인데 말이다. UML 2가 완전해지기 전 까지 스팩의 변경이 있겠지만 변경 내용은 미미하다. 주요한 변경은 UML 내부에서 이루어질 것이다.
이 글을 쓰는 이유는 UML 다이어그램이다. 이번 달에는 시퀀스 다이어그램을 면밀히 검토할 것이다. 이 글에 소개된 예제들은 새로운 UML 2 스팩에 기반하였다.
시퀀스 다이어그램은 객체들 간 인터랙션을 발생 순서대로 보여줄 때 쓰인다. 클래스 다이어그램과 마찬가지로 개발자들은 이 시퀀스 다이어그램이 자신들을 위한 것이라고 생각한다. 하지만 영업 부서의 직원들 역시 비즈니스가 어떻게 돌아가고 있는지를 설명할 때, 시퀀스 다이어그램을 사용할 수 있다. 기업의 현업을 문서화 하는 것 외에도 비즈니스 레벨의 시퀀스 다이어그램은, 앞으로의 시스템 구현에 필요한 요구 사항들을 기록하는 문서로서 사용된다. 프로젝트의 요구 사항을 분석하는 동안 분석가들은 사용 케이스를 다음 레벨에 적용할 수 있다. 사용 케이스들은 보다 잘 정리되어 시퀀스 다이어그램 안으로 들어간다.
기업의 기술부 사원들은 앞으로의 시스템이 어떻게 작동해야 하는지를 문서화할 때 시퀀스 다이어그램을 활용할 수 있다. 디자인 단계에서, 아키텍트와 개발자들은 이 다이어그램을 사용하여 시스템 객체의 인터랙션을 실행해 보고, 전체 시스템 디자인을 완성한다.
시퀀스 다이어그램은 주로 형식적인 정련 단계에서 사용된다. 사용 케이스들은 한 개 이상의 시퀀스 다이어그램으로 세분화된다. 새로운 시스템을 설계할 때 사용되기도 하지만, 시퀀스 다이어그램은 기존 "레거시(legacy)" 시스템의 객체들이 현재는 어떻게 인터랙팅 하는지를 문서화하는데 사용될 수 있다. 시스템을 이동할 때 문서화는 매우 유용하다.
|
이 글은 UML 다이어그램에 대한 첫 번째 글이기 때문에 UML 2 다이어그램의 표기법에 추가된 부분, 즉 프레임이라고 하는 표기법 엘리먼트를 먼저 다뤄야겠다. 이 프레임 엘리먼트는 UML 2의 다른 많은 다이어그램 엘리먼트의 기초로 쓰이지만, 처음에 대부분의 사람들은 이 프레임 엘리먼트를 다이어그램의 그래픽 영역이라고 생각한다. 프레임 엘리먼트는 다이어그램의 레이블을 위한 지정된 장소를 제공하고, 다이어그램의 그래픽 영역을 제공한다. 프레임 엘리먼트는 UML 다이어그램에서는 선택 사항이다. 그림 1과 2에서 보듯, 다이어그램의 레이블은 프레임의 "네임박스(namebox)" 라고 부르게 될 왼쪽 코너의 상단에 놓인다. 실제 UML 다이어그램은 더 큰 직사각형 안에서 정의된다.
시각적으로 경계선을 표시하는 것 외에도 이 프레임 엘리먼트는 인터랙션을 설명하는 다이어그램(시퀀스 다이어그램)에서도 중요한 기능도 한다. 시퀀스 다이어그램에서 시퀀스에 대한 인커밍 메시지와 아웃고잉 메시지(인터랙션)는, 이 메시지들을 프레임 엘리먼트의 경계선에 연결하여 모델링 된다. (그림 2). "기초를 넘어서" 섹션에서 설명하도록 하겠다.

그림 2: 인커밍 메시지와 아웃고잉 메시지가 있는 시퀀스 다이어그램
그림 2에서, 다이어그램 레이블이 Sequence Diagram을 의미하는 "sd" 로 시작한다는 것에 주목하라. 다이어그램을 위한 프레임 엘리먼트를 사용할 때 다이어그램의 레이블은 다음 포맷을 따라야 한다.
Diagram Type Diagram Name
UML 스팩은 다이어그램 유형마다 특정 텍스트 값을 준다. (sd = Sequence Diagram, activity = Activity Diagram, use case = Use Case Diagram).
|
시퀀스 다이어그램의 주요 목적은 어떤 결과를 만들어내는 이벤트 시퀀스를 정의하는 것이다. 메시지 보다는 메시지가 발생하는 순서에 초점이 더 맞춰진다. 대부분 시퀀스 다이어그램은 system 객체들 간 어떤 메시지들이 보내지는지, 그리고 어떤 순서로 발생하는지를 나타낸다. 다이어그램은 이 정보를 수직적 측면과 수평적 측면으로 전달한다. 수직 측면에서는 탑다운(top down) 방식으로 메시지/호출이 발생한 시간 순서를 나타내고, 수평 측면에서는 왼쪽에서 오른쪽으로 메시지가 보내진 객체 인스턴스를 보여준다.
시퀀스 다이어그램을 그릴 때 Lifeline 표기법 엘리먼트는 다이어그램 상단에 놓인다. Lifeline은 모델링되는 시퀀스에 개입된 역할 또는 개게 인스턴스들을 나타낸다. 1 Lifeline은 박스의 아래쪽 중심에서 대시(dash) 라인을 그리며 내려간다. (그림 3). 이 Lifeline의 이름은 박스 내부에 있다

그림 3: 인스턴스 이름이 freshman인 Student 클래스 예제
Lifeline의 UML의 네이밍 표준은 다음 포맷은 따른다.
Instance Name : Class Name
그림 3의 예제에서, Lifeline은 Student 클래스의 인스턴스를 나타낸다. 이것의 인스턴스 이름은 freshman이다. Lifeline 이름 밑에 그어진 밑줄에 주목하라. 밑줄이 사용될 때는 Lifeline이 한 시퀀스 다이어그램에서 클래스의 특정 인스턴스를 나타낸다는 것을 의미한다. 특정 종류의 인스턴스(예를 들어, '역할')가 아니다. 구조 모델링에 대해서도 살펴볼 것이다. 지금까지 누가(Bill과 Fred) 그 역할을 수행하는지를 지정하지 않은 시퀀스 다이어그램에는 buyer와 seller 등의 역할이 포함되어 있다는 것을 알 수 있다. 이런 경우 다이어그램은 다른 정황에서도 재사용된다. 시퀀스 다이어그램에 역할 이름이 아닌 인스턴스 이름에 밑줄을 긋는다.
그림 3의 Lifeline 예제는 네임드 객체이다. 하지만 모든 Lifeline이 네임드 객체를 나타내는 것은 아니다. 대신 익명 또는 이름없는 인스턴스를 나타내는데도 Lifeline이 사용될 수 있다. 시퀀스 다이어그램에 이름없는 인스턴스를 모델링 할 때, Lifeline의 이름은 네임드 인스턴스와 같은 패턴을 따른다. 그러나 인스턴스 이름을 주는 대신에, Lifeline의 이름의 부분이 공백으로 된다. 그림 3을 다시 보자. 만약 이 Lifeline이 Student 클래스의 익명 인스턴스를 나타낸다면, Lifeline은 " Student." 이다. 또한 시퀀스 다이어그램은 프로젝트의 디자인 단계에서 사용되기 때문에 유형이 지정되지 않은 객체를 갖고 있는 것이 맞다. 예를 들어 "freshman."이 바로 그것이다.
시퀀스 다이어그램의 첫 번째 메시지는 언제나 상단에서 시작하고 다이어그램의 왼쪽에 위치한다. 뒤따르는 메시지들은 이전 메시지보다 약간 낮게 다이어그램에 추가된다.
메시지를 또 다른 객체에 보내는 객체(lifeline)를 나타내기 위해서 수신 객체에 실선 화살표(동기식 호출일 경우)를 긋는다. 또는 (비동기식일 경우) 막대 화살표를 긋는다. 메시지/메소드 이름은 화살표 위에 놓인다. 수신 객체로 보내지는 메시지는 수신 객체의 클래스가 구현하는 작동/메소드를 나타낸다. 그림 4의 예제에서, analyst 객체는 ReportingSystem 클래스의 인스턴스인 system 객체를 호출한다. analyst 객체는 system 객체의 getAvailableReports 메소드를 호출한다. system 객체는 secSystem 객체에 userId의 인자와 함께 getSecurityClearance 메소드를 호출한다. 이것이 바로 SecuritySystem 클래스 유형이다.2

시퀀스 다이어그램에 대한 메시지 호출을 보여주는 것 외에도 그림 4 다이어그램에는 리턴 메시지가 포함되어 있다. 이 리턴 메시지들은 필수요소는 아니다. 리턴 메시지는 원래 lifeline을 향하도록 점선 화살표로 그려지고 그 위에 리턴 값을 배치한다. 그림 4에서, getSecurityClearance 메소드가 호출될 때 secSystem 객체는 system 객체에 userClearance를 리턴한다. 이 system 객체는 getAvailableReports 메소드가 호출되면 availableReports를 리턴한다.
다시 말하지만, 리턴 메시지는 시퀀스 다이어그램의 선택 사항이다. 리턴 메시지의 사용 여부는 모델링되는 것의 상세함 정도에 달려있다. 리턴 메시지는 보다 상세한 것을 원할 때 유용하다. 하지만 호출 메시지로도 충분하다. 개인적으로는 값이 리턴될 때마다 리턴 메시지를 삽입한다.
시퀀스 다이어그램을 모델링 할 때, 객체가 자신에게 메시지를 보내야 할 때가 있다. 언제 객체가 자기자신을 호출할까? 순수주의자들은 객체는 메시지를 객체 자신에게 보내서는 안된다고 주장한다. 하지만 자신에게 메시지를 보내는 객체를 모델링 하는 것도 어떤 경우에는 유용하다. 그림 5는 그림 4를 개선한 것이다. 그림 5는 determineAvailableReports 메소드를 호출하는 system 객체를 보여준다. 그 system 객체에 "determineAvailableReports," 메시지를 보여줌으로써 모델은 이 프로세스가 system 객체에서 발생한다는 사실에 주목할 수 있다.
자기자신을 호출하는 객체를 그리기 위해서는 정상적인 방법으로 메시지를 그리되 또 다른 객체로 연결하는 대신, 메시지를 다시 객체 자신으로 연결한다.

그림 5: determineAvailableReports 메소드를 호출하는 system 객체
그림 5의 예제 메시지는 동기식 메시지이다. 하지만 시퀀스 다이어그램에서는 비동기식 메시지도 모델링 할 수 있다. 비동기식 메시지는 동기식 메시지와 비슷하게 그려지지만 메시지 라인은 막대 화살표로 표시된다. (그림 6)

그림 6: instance2로 보내지는 비동기식 메시지를 나타내는 시퀀스 다이어그램
객체 인터랙션을 모델링 할 때 객체로 보내지는 메시지 조건이 부합해야 할 때도 있다. 가드(guard)는 흐름을 제어하는 UML 다이어그램에서 쓰인다. UML 1.x 와 UML 2.0 모두 가드를 언급했다. UML 1.x에서 보호는 하나의 메시지에만 할당될 수 있었다. UML 1.x의 시퀀스 다이어그램에 가드를 그리려면 보호되고 있는 메시지 라인 위, 메시지 이름 앞에 guard 엘리먼트를 둔다. 그림 7은 메시지 addStudent 메소드에 대한 가드가 있는 시퀀스 다이어그램이다.

그림 7에서 가드는 텍스트 "[pastDueBalance = 0]" 이다. 이 메시지에 가드가 있기 때문에 addStudent 메시지는 시스템 계정이 [pastDueBalance = 0]을 리턴할 경우에만 보내진다.
[Boolean Test]
예를 들어,
[pastDueBalance = 0]
Combined fragments (대안, 옵션, 루프)
대부분의 시퀀스 다이어그램에서 UML 1.x "in-line" 가드는 모델링 되는 시퀀스에 필요한 로직을 핸들하기엔 조금 부족했다. 그러한 기능이 부족하다는 점이 UML 1.x에서 문제가 되었다. UML 2는 "in-line" 가드를 없애고, Combined FFragment라고 하는 표기법 엘리먼트를 추가하여 이러한 문제를 다루고 있다. Combined Fragment는 시퀀스 다이어그램에서 조건의 흐름을 보여주기 위해 메시지들을 하나로 그룹핑하는데 사용된다. UML 2 스팩은 Combined Fragment에 11 개의 인터랙션 유형을 정의하고 있다. 이 중 세 가지는 "기초" 섹션에서 다룰 것이고, 두 가지 유형은 "기초를 넘어서" 섹션에서 설명할 것이다. 나머지 여섯 개는 다음 기회에 다루고자 한다. (나는 책을 집필하는 것이 아니다. 오늘 안으로 이 글을 마무리 해야 한다.)
대안은 두 개 이상의 메시지 시퀀스들간 상호 배타적인 선택을 나타낼 때 사용된다. 3 대안은 전통적인 "if then else" 직 (만일 내가 세 개의 아이템을 구매하면구매금액의 20%를 할인 받는다; 그 외에는 10%의 할인을 받는다.)의 모델링이 가능하다.
그림 8에서 보듯, 대안 엘리먼트는 프레임을 사용하여 그려진다. "alt" 라는 단어는 이 프레임의 네임박스 안에 놓인다. 더 큰 직사각형은 피연산함수로 나누어진다. 4피연산 함수는 대시(dash) 라인으로 분리된다. 각 피연산 함수에는 가드가 주어지고 이 가드는 lifeline 상단에 피연산 함수의 왼쪽 상단 부분을 향해 배치된다. 5피연산함수의 가드가 "true,"로 되면 그 피연산함수를 따라야 한다.

그림 8: 대안 Combined Fragment를 포함하고 있는 시퀀스 다이어그램
대안이 어떻게 읽혀지는지를 보여주는 예제로서 그림 8은 상단에서 시작하는 시퀀스를 보여준다. check amount와 account의 balance 정보가 있는 bank 객체가 있다. 이 부분에서 대안이 사용된다. 가드 "[balance >= amount]" 때문에 account의 balance이 보다 크거나 같을 때 시퀀스는 addDebitTransaction과 storePhotoOfCheck 메시지를 account 객체로 보내는 bank 객체를 사용하여 시퀀스를 지속시킨다. 하지만 balance가 amount 보다 작거나 같을 때 시퀀스는 addInsuffientFundFee와 noteReturnedCheck 메시지를 account 객체로 보내고, returnCheck 메시지를 자기 자신에게 보내는 bank 객체로 처리한다. "[else]" 가드 때문에 balance가 amount 보다 작거나 같을 때 두 번째 시퀀스가 호출된다. 대안을 사용하면 "[else]" 가드가 필요 없다. 하지만 피연산함수가 이것에 대한 명확한 가드를 갖고 있지 않다면 "[else]" 가드가 필요하다.
대안은 "if then else"에만 국한되지 않는다. 필요한 만큼 대안 경로를 취할 수 있다. 더 많은 대안이 필요하면 시퀀스의 가드와 메시지를 포함한 직사각형에 피연산함수를 추가하면 된다.
옵션 Combined Fragment는 특정 상황에서 발생하는 시퀀스를 모델링 할 때 사용된다. 다른 경우, 이 시퀀스는 발생하지 않는다. 이 옵션은 간단한 "if then"문장을 모델링 하는데 쓰인다. (찬장에 5개 미만의 도넛이 있다면 24개 이상의 도넛을 만든다.)
옵션 표기법은 대안과 비슷하다. 단 한 개의 피연산 함수를 가져야 하고, "else" 가드가 전혀 없다는 것을 제외하고는 말이다. 옵션을 그리려면 프레임을 그려야 한다. "opt" 텍스트가 이 프레임의 네임박스 안에 배치되고, 이 프레임의 콘텐트 영역에 옵션의 가드가 lifeline의 상단에, 왼쪽 상단 코너를 향해 배치된다. 그런 다음 옵션의 메시지 시퀀스가 나머지 영역에 배치된다. (그림 9)

옵션 Combined Fragment는 읽기 쉽다. 그림 9는 그림 7의 시퀀스 다이어그램을 재구성 한 것이다. 하지만 여기에서는 student의 과거 해당 balance가 0일 경우 보내져야 하는 메시지가 더 많기 때문에 옵션을 사용한다. 그림 9의 시퀀스 다이어그램을 보면, student의 과거 balance가 0 이면 addStudent, getCostOfClass, chargeForClass 메시지들이 보내진다. student의 과거 balance가 0이 아니라면 시퀀스는 어떤 메시지도 보내지 않는다.
그림 9의 시퀀스 다이어그램에는 이 옵션용 가드가 포함되어 있다. 하지만 이 가드는 필수 엘리먼트는 아니다. 추상 시퀀스 다이어그램에서는 이 옵션의 조건을 지정한다. 이것이 옵션 fragment 라는 것을 가리키면 된다.
가끔 반복적인 시퀀스를 모델링 해야 할 때도 있다. UML 2에서 반복되는 시퀀스의 모델에 루프 Combined Fragment를 사용한다.
루프는 외형상 옵션과 매우 흡사하다. 프레임을 그리고 그 프레임의 네임박스에 "loop"라고 쓴다. 프레임의 콘텐트 영역 안에서 루프의 가드는6 lifeline의 상단에, 왼쪽 상단 코너 쪽을 향하여 놓인다. 그런 다음 루프의 메시지 시퀀스는 프레임의 나머지 콘텐트 영역에 배치된다. 루프에서 가드는 두 가지 특별한 조건을 가질 수 있다. 이 특별 가드 조건들은 "minint = [the number]" ("minint = 1")라고 하는 최소 반복과 and maximum iterations written as "maxint = [the number]" ("maxint = 5")라고 하는 최대 반복이다. 최소 반복 가드를 사용하여, 루프는 지정된 최소한의 수만큼 실행해야 하고 최대 또한 마찬가지이다.

그림 10(크게 보기)에서, 루프는 reportsEnu 객체의 hasAnotherReport 메시지가 false를 리턴할 때까지 실행된다. 이 시퀀스 다이어그램의 루프는 루프 시퀀스가 실행되는지를 확인할 때 부울 테스트를 사용한다. 이 다이어그램은 위에서부터 읽어 내려간다. 루프에 다다르면 hasAnotherReport 값이 true 인지를 확인하기 위해 테스트가 실행된다. HasAnotherReport 값이 true 면 시퀀스는 루프로 간다.
|
지금까지 시퀀스 다이어그램의 기초를 설명했다. 다음 섹션에서는 수준 높은 표기법에 대해서 알아보자.
시퀀스 다이어그램을 만들 때, 개발자는 기존 시퀀스 다이어그램을 재사용하는 경우가 많다. 7 UML 2부터, "Interaction Occurrence" 엘리먼트가 도입되었다. Interaction Occurrence가 추가되었다는 것은 UML 2의 인터랙션 모델링의 가장 중요한 혁신이다. Interaction Occurrence는 기본적인 시퀀스 다이어그램을 복잡한 시퀀스 다이어그램으로 만드는 기능이다. 이것을 사용하여 간단한 시퀀스를 조합(재사용)하여 보다 복잡한 시퀀스를 만들 수 있다. 보다 복잡하고 완벽한 시퀀스의 가능성이 커진 것이다.
Interaction Occurrence 엘리먼트는 프레임을 사용하여 그려진다. “ref” 텍스트가 프레임 네임박스 안에 놓이고 참조되는 시퀀스 다이어그램의 이름이 프레임의 콘텐트 영역 내부에 놓인다. 여기에 더불어 시퀀스 다이어그램에 대한 매개변수도 함께 배치된다. 참조되는 시퀀스 다이어그램의 표기법은 다음 패턴을 따른다.
sequence diagram name[(arguments)] [: return value]
두 가지 예제를 보자.
1. Retrieve Borrower Credit Report(ssn) : borrowerCreditReport또는
2. Process Credit Card(name, number, expirationDate, amount : 100)예제 1에서, 이 신택스는 Retrieve Borrower Credit Report라고 하는 시퀀스 다이어그램을 호출하여 이를 ssn 매개변수로 보낸다. Retreive Borrower Credit Report 시퀀스는 borrowerCreditReport 변수를 리턴한다.
예제 2에서는 Process Credit Card 라고 하는 시퀀스 다이어그램을 호출하고 이를 매개변수인 name, number, expiration date, amount로 전달한다. 하지만 예제 2에서 amount 매개변수는 100이 될 것이다. 예제 2에 레이블이 붙은 리턴 값이 없기 때문에 시퀀스는 값을 리턴하지 않는다. (모델링되는 이 시퀀스는 리턴 값이 필요 없다.)

그림 11: 두 개의 다른 시퀀스 다이어그램을 참조하는 시퀀스 다이어그램
그림 11은 시퀀스 다이어그램 "Balance Lookup"과 "Debit Account."를 참조하는 시퀀스 다이어그램이다. 이 시퀀스는 왼쪽 상단에서 Customer가 메시지를 teller 객체로 보내는 것으로 시작한다. 이 teller 객체는 theirBank 객체로 메시지를 보낸다. 그 지점에서 Balance Lookup 시퀀스 다이어그램이 매개변수로서 전달된 accountNumber와 함께 호출된다. Balance Lookup 시퀀스 다이어그램은 balance 변수를 리턴한다. 그런 다음, 이 옵션의 가드 조건은 balance가 amount 변수보다 큰 지를 확인하기 위해 검사된다. balance가 amount 보다 클 경우 Debit Account 시퀀스 다이어그램이 호출되면서 이것을 accountNumber로 보내고 매개변수로서 amount를 전달한다. 시퀀스가 완료된 후에 withdrawCash 메시지가 customer에게 cash를 리턴한다.
그림 11에서, theirBank의 lifeline은 "Balance Lookup" 인터랙션 뒤에 숨겨진다. 인터랙션이 이 lifeline을 숨기기 때문에 theirBank lifeline은 "Balance Lookup" 시퀀스 다이어그램에서 참조된다. 인터랙션 발생에서 lifeline을 숨기는 것 외에도 UML 2는 lifeline이 “Balance Lookup” 시퀀스에 같은 theirBank를 갖도록 지정한다.
인터랙션 발생에서 참조되지 않는 lifeline들을 중첩하는 시퀀스 다이어그램을 모델링 할 때가 있다. 이 같은 경우, lifeline은 정상적인 lifeline으로 나타나고 인터랙션 발생에 의해 숨겨지지 않는다.
그림 11에서 이 시퀀스는 "Balance Lookup" 시퀀스 다이어그램을 참조한다. "Balance Lookup" 시퀀스 다이어그램은 그림 12에서 볼 수 있다. 이 예제 시퀀스는 매개변수들과 리턴 값을 갖고 있기 때문에 다이어그램의 네임박스에 있는 레이블은 특정 패턴을 따른다.
Diagram Type Diagram Name [(Parameter Type : Parameter Name)] :
[: Return Value Type]
예제
1. SD Balance Lookup(Integer : accountNumber) : Real또는
2. SD Available Reports(Financial Analyst : analyst) : Reports그림 12는 예제 1을 설명하고 있다. Balance Lookup 시퀀스가 accountNumber 매개변수를 이 시퀀스의 변수로서 사용하고, 시퀀스 다이어그램은 리턴되는 Real 객체를 보여준다. 이 같은 경우 시퀀스가 객체를 리턴하는 곳에서, 리턴되는 객체에는 시퀀스 다이어그램의 인스턴스 이름이 부여된다.

그림 12: accountNumber의 매개변수를 취하고 Real 객체를 리턴하는 시퀀스 다이어그램
그림 13은 시퀀스가 매개변수를 취하고 객체를 리턴하는 예제 2를 묘사하고 있다. 그림 13에서, 이 매개변수는 시퀀스의 인터랙션에 사용된다.

그림 13: 인터랙션에 매개변수를 사용하고 Reports 객체를 리턴하는 시퀀스 다이어그램
이전 섹션에서는 매개변수와 리턴 값을 통해 정보를 전달하여 또 다른 시퀀스 다이어그램을 참조하는 방법을 설명했다. 그러나 시퀀스 다이어그램들 간 정보를 전달하는 또 다른 방법이 있다. 게이트(gate)는 시퀀스 다이어그램과 내용들 간 정보 전달을 모델링 할 수 있는 쉬운 방법이다. 게이트는 시퀀스 다이어그램의 프레임의 끝에 연결된 한쪽 끝과 lifeline에 연결된 또 다른 끝으로 설명되는 메시지이다. 게이트를 사용하여 그림 11과 12를 다시 만들어 그림 14와 15로 변형시켰다. 그림 15의 예제 다이어그램은 accountNumber의 매개변수를 취하는 getBalance라고 하는 엔트리 게이트를 갖고 있다. getBalance 메시지는 엔트리 게이트이다. 다이어그램의 프레임에 연결된 화살표가 lifeline을 향하기 때문이다. 이 시퀀스 다이어그램에는 종료 게이트도 있다. 이것은 balance 변수를 리턴한다. 종료 게이트는 lifeline에서 다이어그램의 프레임으로 연결된 리턴 메시지이기 때문에 인식된다. 화살표는 프레임으로 향한다.


Combined Fragment (중지(break)와 병렬(parallel))
이 글 도입부에서 다루었던 "기초" 섹션에서 "대안", "옵션", "루프"로 알려진 Combined Fragment를 다루었다. 이 세 가지 Combined Fragment는 대부분의 사람들이 가장 많이 사용하는 것들이다. 하지만 더욱 유용한 Combined Fragment 두 가지가 더 있다. 바로 중지(break)와 병렬(parallel)이다.
중지는 거의 모든 면에서 옵션(option)과 동일하다. 두 가지 예외를 제외하고는 말이다. 우선, 중지의 프레임에는 네임박스가 "옵션" 대신 "중지"이다. 둘째, 중지의 메시지가 실행될 때 끝내기 인터랙션의 나머지 메시지들은 시퀀스가 끝내기 인터랙션에서 정지되기 때문에 실행되지 않는다. 이러한 방식으로 중지는 C++ 또는 Java 같은 프로그래밍 언어의 중지 키워드와 흡사하다.

그림 16: 그림 8의 시퀀스 다이어그램 재구성- 대안(alternative) 대신 중지 사용
중지는 예외 핸들링을 모델링 할 때 사용된다. 그림 16은 그림 8을 재구성 한 것이다. 이것은 balance < amount 조건을 대안 플로우 대신 예외로 처리한다. 그림 16을 읽는 방법은 시퀀스의 왼쪽 상단 코너부터 읽어 내려간다. 이 시퀀스가 리턴 값 "balance," 에 다다르면 balance가 amount 보다 적은지를 확인한다. balance가 amount 보다 작지 않으면 그 다음 메시지가 addDebitTransaction 메시지로 보내지고, 이 시퀀스는 지속된다. 하지만 balance가 amount 보다 작으면 이 시퀀스는 중지로 들어가고 해당 메시지가 보내진다. 중지의 모든 메시지들이 보내지면 이 시퀀스는 남아있는 메시지(addDebitTransaction)를 보내지 않고 종료된다.
중지는 마무리 인터랙션의 시퀀스를 종료한다. 그 다이어그램에 설명된 모든 시퀀스를 종료하지는 않는다. 중지가 대안 또는 루프의 일부일 경우 오직 대안 또는 루프만 종료된다.
현대적 컴퓨터 시스템은 더 복잡해지고 때때로 동시 태스크도 수행한다. 복잡한 태스크의 일부를 종료하는데 드는 프로세싱 시간이 생각 보다 길 때 어떤 시스템은 프로세싱의 일부를 병렬(parallel)로 처리한다. 병렬 엘리먼트는 병렬 프로세싱 작동을 보여주는 시퀀스 다이어그램에 사용한다.
병렬은 프레임을 사용하여 그려지고 프레임의 네임박스에 "par"로 표시한다. 프레임의 콘텐트 섹션을 점선으로 구분된 수평 피연산 함수로 나눈다. 이 프레임의 각 피연산 함수는 병렬로 수행되는 실행 쓰레드이다.

그림 17: 두 가지 태스크를 병렬로 수행하는 객체 예제
그림 17에는 병렬로 작동하는 객체 예제로서 그다지 훌륭한 것은 아니지만 이해하기는 쉽다. 이 시퀀스는 이렇게 진행된다. hungryPerson이 cookFood 메시지를 oven 객체로 보낸다. oven 객체가 그 메시지를 받으면 두 개의 메시지를 nukeFood와 rotateFood로 동시에 보낸다. 이들 메시지 모두 실행된 후에 hungryPerson 객체에 oven 객체에서 yummyFood가 리턴된다.
|
이 시퀀스 다이어그램은 시스템 요구사항들을 문서화하고 시스템 디자인을 한꺼번에 볼 수 있는 좋은 다이어그램이다. 시퀀스 다이어그램이 유용한 이유는 인터랙션이 발생하는 시간 순서로, 시스템의 객체들간 인터랙션 로직을 보여주기 때문이다.
|
- UML 2.0 Superstructure Final Adopted Specification (Chapter 8 in particular) http://www.omg.org/cgi-bin/doc?ptc/2003-08-02
- UML 2 Sequence Diagram Overview http://www.agilemodeling.com/artifacts/sequenceDiagram.htm
- UML 2 Tutorial http://www.omg.org/news/meetings/workshops/UML%202003%20Manual/Tutorial7-Hogg.pdf
|
1 완전히 모델링 된 시스템에서 이 객체들(클래스의 인스턴스들)도 시스템의 클래스 다이어그램에서 모델링 된다.
2 분석가가 이 시퀀스 다이어그램을 읽을 때 이 시스템에 이미 로그인 된 것으로 간주한다.
3 다양한 대안 피연산 함수에 첨부된 두 개 이상의 가드 조건들을 동시에 true로 만드는 것이 가능하다. 하지만 대부분의 경우, 피연산 함수가 런타임 시 실제로 발생하는 피연산 함수는 단 한 개이다. (대안 "wins" 는 UML 표준으로 정의되지 않았다.)
4 피연산 함수가 고속도로의 차선(lane)처럼 보이겠지만, 그렇다고 해서 차선으로 부르지 않는다. 수영 레인(swim lane)이 액티비티 다이어그램에 사용되는 UML 표기법이다. The Rational Edge's의 액티비티 다이어그램을 참조하라.
5 가드가 부착된 lifeline은 가드 식에 포함된 변수를 갖고 있다.
6 옵션과 마찬가지로 루프 역시 가드 조건이 배치될 필요가 없다.
7 어떤 유형의 시퀀스 다이어그램도 재사용 가능하다.
| Donald Bell: IT 전문가, IBM.
|
|
애플이 공개한 2008년 앱스토어 아이폰 어플리케이션 다운로드 순위입니다. 어플리케이션 전체의 다운로드 순위이며 유료와 무료로 나뉘어져 있습니다.
Top Paid Apps (Overall):
- (엔터테인먼트) Koi Pond
- (게임) Texas Hold’em
- (게임) Moto Chaser
- (게임) Crash Bandicoot: Nitro Kart 3d
- (게임) Super Monkey Ball
- (게임) Cro-Mag Rally
- (게임) Enigmo
- (음악) Pocket Guitar
- (비지니스) Recorder
- (엔터테인먼트) iBeer
Top 10 Free Downloads (Overall)
- (음악) Pandora Radio
- (소셜네트웍) Facebook
- (게임) Tap Tap Revenge
- (음악) Shazam
- (게임) Labyrinth Lite Edition
- (엔터테인먼트) Remote
- (여행) Google Earth
- (엔터테인먼트) Lightsaber Unleashed
- (소셜네트웍) AIM
- (여행) Urbanspoon
개인 블로거가 주관적 판단으로 아이폰 어플 시장에 관한 이야기 링크
출처 : http://www.mobileplace.co.kr/1700
작성자 : 회색(박성서)













