분석단계는 요구사항, 개념, 시스템 작동에 대한 이해를 강조한다.
분석단계에서 산출물
유스케이스 - 도메인 프로세스는 뭔지, 기능적 요구사항이 뭔지
도메인 모델 - problem 도메인과 관련된 개념, 용어는 뭔지
시스템 시퀀스 다이어그램 - 시스템 이벤트와 작동은 뭔지
계약 - 시스템 작동이 되면 하는게 뭔지
설계 단계는 시스템이 요구 사항을 충족하는 방법에 대한 질문에 중점을 둡니다.
설계 단계에서는 객체(및 인터페이스)의 관점에서 논리적 솔루션을 강조합니다.
또한 여기서 다이어그램을 그린다.
Interaction diagrams(동적) - 객체가 통신하는 방법, 동적 측면
Class diagrams(정적) - 정적 객체 관계, 정적 측면
Interaction diagrams은
시퀀스 다이어그램과 커뮤니케이션 다이어그램이 있다.
시퀀스 다이어그램은 시간의 흐름에 집중하고
커뮤니케이션 다이어그램(Collaboration diagram이라고도 함)은 공간에 집중한다.
그냥 이름만 적히면 클래스
:클래스 이면 클래스로 만들어진 객체
객체이름:클랙스 이면 이름이 붙은 객체
Link 는 association과 같다. 실선임
특이점 시퀀스 다이어그램은 link를 보여주지 않는다. => 클래스간의 연관 관계 못봄
메세지 표기방법
메시지는 링크 위에 화살표를 통해서 표현됨
기본적으로 순서:메시지명() 이다.
커뮤니케이션 다이어그램은 작동 순서를 표현하기 위해 메시지 왼쪽에 숫자를 통해서 표기한다.
순서는 1, 1과 관련된 {1.1, 1.2, 1.3}, 2, 2와 관련된 {2.1, 2.2, 2.3}, 3, ~ 이런 식이다.
왜 n.1 n.2를 사용하냐면 그냥 1,2,3,4,5 이러면 순서 이해는 쉽지만 메세지를 보내고 생긴 인과관계에 대해서 파악하기 어렵기 때문이다.
객체 스스로 본인한테 메시지 보내는 것도 가능하다.
객체의 생성과 삭제를 표현하는 방법은
메시지 위에 << create >> << delete >> 라고 쓰면 된다.
파라미터와 리턴 타입의 표기법은 다음과 같다.
순서:함수명(변수명 : 파라미터 타입)
Money타입의 amount 를 파라미터로 보낼 땐 메시지 옆에 (amount: Money) 쓴다.
순서:받는 변수명:=실행함수() : 리턴타입
리턴 값은 tot에 Integer인 total() 실행 리턴 값을 받는다를 의미한다.
위 그림은 어떻게 해석할까?
2:transfer(targetAccount, amount) 는
transfer함수에 targetAccount와 amount에 대한 값을 보내는 것을 의미한다.
인출을 해야할 때 계좌번호와 액수라고 생각하면 된다.
하지만 인출하기 위한 잔액이 있는지 확인하기 위해 hasBalace에 amount를 파라미터로 실행하면
boolean 타입의 리턴값이 돌아온다.
조건 IF에 대한 표기법은 순서:[조건] 메시지명 이렇게 해서 보낸다.
그렇다면 if else 는 어떻게 표현할까?
주의해서 봐야할 점은 그냥 if문은 순서(숫자):[조건]메시지명 이지만
분기를 나눌 때는 순서(숫자+소문자알파벳):[조건]메시지명 이라는 것이다.
분기 다음 메시지도 소문자 알파벳을 반영하는 것을 위 그림을 통해 알 수 있다.
for, while과 같은 loop문은 어떻게 표현할까?
순서*[i:=1..n]:메시지명
i는 1부터 n까지 수행한다는 의미이다.
이때 만약 메시지를 받는 객체가 Collection에 속하는 배열같은 거라면 어떨까?
그래서 메시지가 배열속에 모든 애들한테 전달되어야 한다면?
원래 리턴 값은
순서:받는 변수명:=실행함수() : 변수타입
이런 식으로 작성했다. 하지만 위 그림에서 i가 n까지 돌 때 lineItems의 내용을 st로 가져오고 싶을 때
순서*[i=1..n]: 받는 변수명 = 실행함수 로 표현한다.
이건 뭐 딱히 정답이 없는 것 같다.