모던지 / 정보처리기사 / 소프트웨어 설계 3강. UML과 객체지향 설계

소프트웨어 설계 3강. UML과 객체지향 설계

1990년대 객체지향 표기법은 오십 가지가 넘었습니다. 서로 자기 그림이 맞다고 싸우던 세 사람이 한 회사에 모이면서 전쟁이 끝났죠.

풀고 시작

문제 1. UML 다이어그램 중 객체들이 주고받는 메시지를 시간 순서에 따라 나타내는 것은?
시간의 흐름을 세로축에 두고 객체 사이 메시지를 가로 화살표로 그리는 것이 시퀀스 다이어그램입니다. 클래스와 배치는 구조를 나타내는 정적 다이어그램이고, 유스케이스는 사용자와 기능의 관계를 그릴 뿐 시간 순서를 표현하지 않습니다.

삼총사가 만든 표준어

1990년대 초 객체지향 설계 표기법은 난립 상태였습니다. 제임스 럼바우의 OMT, 그래디 부치의 부치 방법론, 이바 야콥슨의 OOSE가 각자의 기호를 쓰고 있었죠. 같은 시스템을 그려도 회사가 다르면 서로 읽지 못했습니다. 그러다 셋이 모두 래셔널이라는 한 회사로 모입니다. 업계는 이들을 삼총사(three amigos)라고 불렀고, 그 결과물이 1997년 표준으로 채택된 UML(Unified Modeling Language)입니다.

UML은 그리는 순서를 정해 주는 방법론이 아니라 표기법입니다. 구성 요소는 셋으로 정리됩니다. 클래스나 관계처럼 그림을 이루는 사물(things), 사물을 잇는 관계(relationships), 그리고 이들을 모아 보여 주는 다이어그램(diagrams)입니다.

다이어그램은 크게 둘로 갈립니다. 구조 다이어그램은 정적인 뼈대를 그립니다. 클래스, 객체, 컴포넌트, 배치, 복합체 구조, 패키지 여섯이죠. 행위 다이어그램은 시간에 따른 움직임을 그립니다. 유스케이스, 시퀀스, 커뮤니케이션, 상태, 활동, 상호작용 개요, 타이밍 일곱입니다. 시험은 대개 하나를 던지고 "정적인가 동적인가"를 묻습니다. 배치와 컴포넌트가 구조 쪽이라는 것만 잡아 두시면 나머지는 이름에서 짐작이 됩니다.

관계의 여섯 가지 화살표

클래스 다이어그램에서 선을 어떻게 그리느냐가 곧 설계 판단입니다.

관계 표기
연관 (Association) 서로를 알고 참조한다 실선
집합 (Aggregation) 전체와 부분이지만 부분이 홀로 존재할 수 있다 속이 빈 마름모
합성 (Composition) 전체가 사라지면 부분도 사라진다 속이 찬 마름모
일반화 (Generalization) 상위와 하위, 상속 관계 속이 빈 삼각형 화살표
의존 (Dependency) 잠깐만 쓰는 사이, 매개변수나 지역변수 점선 화살표
실체화 (Realization) 인터페이스가 약속한 것을 구현한다 점선 삼각형 화살표

집합과 합성의 차이는 예로 잡으시면 잊히지 않습니다. 컴퓨터와 마우스는 집합입니다. 컴퓨터를 버려도 마우스는 다른 컴퓨터에 꽂으면 되니까요. 반면 주문서와 주문 항목은 합성입니다. 주문서를 지우면 그 안의 항목은 존재할 이유가 없죠. 속이 찬 마름모가 더 강한 소유라고 기억하시면 됩니다.

객체지향의 다섯 낱말, 그리고 럼바우

객체지향 개념은 다섯 낱말로 압축됩니다. 캡슐화는 데이터와 그것을 다루는 연산을 하나로 묶는 것이고, 그 결과로 외부에서 내부 구현을 못 보게 되는 것이 정보 은닉입니다. 상속은 상위 클래스의 속성과 연산을 물려받는 것이고, 다형성은 같은 메시지에 객체마다 다르게 반응하는 성질입니다. 도형에게 그리라고 시키면 원은 원을, 사각형은 사각형을 그리는 그 상황이죠. 추상화는 공통된 성질만 뽑아 내는 것입니다.

시험이 특히 좋아하는 것은 럼바우의 객체지향 분석 절차입니다. 순서가 정해져 있습니다. 객체 모델링으로 시스템의 정적 구조를 클래스 다이어그램으로 그리고, 동적 모델링으로 상태와 시간 흐름을 상태 다이어그램으로 그리고, 기능 모델링으로 자료 흐름도를 써서 처리 과정을 그립니다. 객체가 먼저이고 기능이 마지막이라는 순서가 그대로 문제가 됩니다.

한편 유스케이스 다이어그램에서 헷갈리는 두 관계도 정리해 두시죠. 포함(include)은 반드시 실행되는 필수 관계이고, 확장(extend)은 조건에 따라 실행될 수도 있는 선택 관계입니다. 결제에는 로그인이 반드시 포함되지만, 결제에 쿠폰 적용은 조건부로 확장됩니다.

다음 강은 이 설계가 사용자와 만나는 지점, 화면 설계로 넘어갑니다.

인출 문제

문제 1. 전체 객체가 소멸되면 부분 객체도 함께 소멸되는 강한 소유 관계를 나타내는 UML 표기는?
속이 찬 마름모가 합성이며, 전체의 생명주기에 부분이 종속됩니다. 속이 빈 마름모는 부분이 홀로 존재할 수 있는 집합이고, 빈 삼각형 화살표는 상속인 일반화, 점선 화살표는 잠시 사용하는 의존 관계입니다.
문제 2. 럼바우의 객체지향 분석 절차를 순서대로 옳게 나열한 것은?
무엇이 있는지를 먼저 정하고, 그것들이 시간에 따라 어떻게 변하는지를 보고, 마지막으로 어떤 처리를 하는지를 그립니다. 기능을 앞세운 보기가 함정인데, 그건 구조적 분석의 사고방식이지 객체지향의 순서가 아닙니다.
문제 3. UML 다이어그램 중 구조 다이어그램에 속하지 않는 것은?
활동 다이어그램은 처리의 흐름을 나타내는 행위 다이어그램입니다. 컴포넌트와 배치는 소프트웨어와 하드웨어의 물리적 구성을, 패키지는 요소의 묶음을 보여 주는 정적 구조 다이어그램입니다.
문제 4. 유스케이스 다이어그램에서 include와 extend 관계에 대한 설명으로 옳은 것은?
결제 유스케이스가 로그인을 include하면 로그인은 항상 일어나고, 쿠폰 적용을 extend로 두면 조건이 맞을 때만 일어납니다. 둘 다 유스케이스 사이의 관계이며, 액터 사이에 그리는 것은 일반화입니다.

생각해볼 질문 (정답 없음)

설계도를 그리는 데 드는 시간이 코드를 고치는 시간보다 길다면, 그 설계도는 여전히 그릴 가치가 있을까요. 어느 규모부터 그림이 말보다 싸질까요.


이전: 2강 요구사항 확인과 분석 모델 · 다음: 4강 화면 설계와 UI

모던지 · 궁금하면 모던지 GitHub · 2026-09-10