본문 바로가기
기타/UML

UML을 만드는 순서

by 책 읽는 개발자_테드 2023. 3. 24.
반응형

행위

UML 다이어그램은 만들기 위해 행위부터 시작하는 것이 좋다. 휴대전화를 제어하는 소프트웨어를 가정해본다. 간단한 시퀸스 다이어그램을 그리며 문제를 풀기 시작할 수 있다.

 

버튼이 눌릴 때마다 이를 감지해서 다이얼 돌리는 일을 제어하는 객체에 메시지를 보내는 것을 상상할 수 있다. 버튼 객체와 다이얼러 객체를 그려 버튼이 다이얼러에 번호 메시지를 여러 개 보내는 것을 그린다. *는 여러 개를 의미한다.

다이얼러가 번호 메시지를 받으면 화면에 번호를 표시한다. 즉, 화면(Screen) 객체에 displayDigit 메시지를 보낸다. 

스피커에서도 소리가 나도록한다.

숫자를 입력한 후 전송(Send) 버튼을 눌러 전화를 건다. 이때, 셀 네트워크에 접속해서 사용자가 누른 전화번호를 전달하라고 휴대전화의 무선 부분(Radio)에 말한다.

 

연결이 맺어지면, Radio는 화면 객체에 사용 중 지시자에 불을 켜라고 말한다. 이 메시지를 보낼 때는 다른 스레드를 사용할 가능성이 높으므로, 시퀸스 번호 앞에 글자를 붙여 이를 표현한다.

· 위 과정을 통해 아무것도 없는 상태에서 어떻게 협력을 만드는지 알 수 있다.

 

구조 점검

과정을 더 진행하기 전 협력이 코드 구조에서 어떤 의미인지 조사한다. 이 협력을 만들 수 있는 클래스 다이어그램을 그려보자.

클래스 다이어그램에서 협력에 참여하는 객체마다 클래스가 하나씩 생기며, 협력의 연결(link)마다 연관이 하나씩 생긴다. 위 클래스 다이어그램의 문제가 있다.  버튼이 다이얼러에 의존한다는 것이다. 이를 코드로 표현하면 다음과 같다.

public class Button {
	private Dialer itsDialer;
    public Button(Dialer dialer) {
    	itsDialer = dialer;
    }
    ...
}

 

버튼은 다이얼러 이외에도 휴대전화 On/Off, 음량 On/Off 등 다양하게 쓰일 수 있지만, 다이얼러에 의존하게되면 재사용할 수 없다. 문제를 해결하기 위해 버튼과 다이얼러 사이에 인터페이스를 만든다.

 

버튼은 고유한 식별자 토큰을 갖도록 한다. 버튼 클래스가 자신이 눌렸다는 사실을 감지하면, ButtonListener 인터페이스의 buttonPressed 메서드를 호출하여 자기 식별자 토큰을 인자로 넘긴다. 

위 구조도 문제가 있다. Dialer가 Button을 알고 있다는 것이다. Dialer와 Button은 관계가 없으므로 Dialer 클래스에 buttonPressed 메서드가 있을 필요는 없다. 어댑터를 사용하여 해당 문제를 해결하자. 더불어 식별자 토큰 사용이라는 어설픈 아이디어도 없앨 수 있다.

public class ButtonDialerAdapter implements ButtonListener {
	private int digit;
    private Dialer dialer;
	public ButtonDialerAdapter(int digit, Dialer dialer){
    	this.digit = digit;
        this.dialer = dialer;
    }
    public void buttonPressed() {
    	dialer.digit(digit);
    }
}

출처

UML 실전에서는 이것만 쓴다.

반응형

'기타 > UML' 카테고리의 다른 글

UML(Unified Modeling Language)이란?  (0) 2023.03.23

댓글