본문 바로가기

CS 공부

CS) OOAD와 UML 개발 방식

1. OOAD(Object-Oriented Analysis and Design) 개요

객체지향 분석 및 설계는 소프트웨어를 객체 단위로 분석하고 설계하는 과정으로, 현실 세계의 개체(Entity)와 행위를 모델링하여 유지보수성과 확장성을 높인다.

 

  1. OOA (Object-Oriented Analysis, 객체지향 분석)

 

개념

  • 요구사항을 분석하여 객체 모델을 도출하는 과정
  • 소프트웨어 개발의 초기 단계에서 문제 영역(Domain)을 분석하고, 사용자가 필요로 하는 기능과 객체 간의 관계를 정의한다.
  • 비즈니스 로직과 사용자의 요구사항을 명확히 모델링하는 것이 핵심

 

주요 특징

  1. Use-Case 중심 분석
    • 사용자의 요구사항을유스케이스 다이어그램으로 정리
    • 액터(Actor)와 유스케이스(Use-Case) 간의 관계 정의
  2. 개념적 클래스 모델링
    • 도메인 내에서 중요한 개체(Entity)와 속성(Attribute)을 식별
    • 개체 간의 관계(연관, 상속, 집합, 복합 관계) 모델링
  3. 기능과 책임 정의
    • 각 객체가 수행해야 할 기능(메서드)과 책임을 분리
    • 객체 간의 협력(메시지 전달) 방식 설계

 

예제

  • 요구사항: 사용자가 상품을 검색하고 장바구니에 추가한 후 결제하는 기능이 필요
  • 유스케이스 분석

 

도출된 객체

객체 속성 메서드
User 이름, 이메일, 패스워드 로그인(), 회원가입()
Product 상품명, 가격, 재고량 재고확인(), 상품정보조회()
Cart 상품목록, 총 가격 상품추가(), 상품삭제()
Order 주문번호, 주문일자, 결제상태 주문확정(), 결제처리()

 

  2. OOD (Object-Oriented Design, 객체지향 설계)

 

개념

  • OOA에서 도출한 객체 모델을 기반으로 실제 소프트웨어의 설계 구조를 만드는 과정
  • 소프트웨어의 내부 구조를 정의하고, 객체 간의 상호작용을 UML 다이어그램(클래스 다이어그램, 시퀀스 다이어그램 등)으로 표현
  • 객체 간의 협력, 인터페이스 설계, 데이터 흐름을 구체적으로 설계

 

주요 특징

  1. 객체 간 관계 정의
    • 상속, 다형성, 캡슐화를 적용하여 객체 간 협력 구조를 최적화
    • 클래스 다이어그램을 통해 관계 정의
  2. 메서드 및 속성 구체화
    • 객체의 속성과 메서드를 상세히 정의
    • 연관된 객체 간의 데이터 흐름을 고려
  3. 객체 간 메시지 흐름 설계
    • 시퀀스 다이어그램을 통해 객체 간 메시지 전달 방식을 정의
    • 객체가 언제, 어떤 순서로 상호작용하는지 시각화

 

예제

  • OOA에서 분석한 개념적 모델을 구체적인 UML 다이어그램으로 설계
  • 클래스 다이어그램
  • 시퀀스 다이어그램

 

OOA vs OOD 비교

구분 OOA (객체지향 분석) OOD (객체지향 설계)
목적 문제 도메인을 분석하여 객체 모델 정의 소프트웨어 구현을 위한 설계 구조 구성
접근법 사용자의 요구사항 및 비즈니스 로직 중심 시스템 내부 구조와 객체 협력 중심
결과물 개념적 클래스 모델, 유스케이스 다이어그램 클래스 다이어그램, 시퀀스 다이어그램, 설계 문서
활용 다이어그램 유스케이스 다이어그램, 개념적 클래스 모델 클래스 다이어그램, 시퀀스 다이어그램, 상태 다이어그램
초점 어떤 객체가 필요한가? 객체들이 어떻게 협력할 것인가?
예제 “사용자가 상품을 검색하고 주문한다” “Product 클래스는 Order 클래스와 1:N 관계이며, getProductInfo() 메서드를 제공한다”

 

 

대표적인 모델링 언어로 UML(Unified Modeling Language)을 사용하며, 주요 단계는 다음과 같다.

  1. 요구사항 분석: Use-Case 모델링
  2. 분석 모델링: 개념적 클래스 다이어그램
  3. 설계 모델링: 시퀀스 다이어그램, 클래스 다이어그램, 상태 다이어그램 등
  4. 구현: 설계된 구조를 코드로 변환

 

2. Use-Case 분석 (유스케이스 다이어그램)

 

개념

시스템의 기능을 사용자 관점에서 식별하고, 사용자가 시스템과 상호작용하는 방식을 모델링한다.

주요 구성 요소:

  • Actor(행위자): 시스템과 상호작용하는 외부 요소(사용자, 다른 시스템)
  • Use Case(유스케이스): 사용자의 목표를 충족하는 기능
  • Relationships(관계): Actor와 Use Case 간의 연결

 

예제

온라인 쇼핑몰에서 상품을 검색하고 주문하는 기능을 분석한 유스케이스 다이어그램 예시

[사용자] --- (상품 검색)
[사용자] --- (상품 주문)
(상품 주문) ---|> (결제)

 

확장(Extend), 포함(Include) 관계를 활용하여 유스케이스 간의 연관성을 정의

 


3. 시퀀스 다이어그램 (Sequence Diagram)

 

개념

  • 시스템 내부에서 객체 간의 메시지 흐름을 시간 순서에 따라 표현하는 다이어그램
  • 객체 간의 메서드 호출(요청)과 반환 관계를 명확히 하여 동작을 시각화한다.

 

주요 구성 요소

  • Actor(사용자): 시스템을 사용하는 주체
  • Object(객체): 시스템 내에서 역할을 수행하는 개체
  • Message(메시지): 객체 간의 호출 및 응답
  • Lifeline(생명선): 객체가 활성화되는 시간

 

예제

  • 사용자가 상품을 주문하는 시퀀스를 나타낸 다이어그램
[사용자] -> [상품관리]: 상품 검색()
[상품관리] -> [데이터베이스]: 검색 요청
[데이터베이스] -> [상품관리]: 검색 결과 반환
[상품관리] -> [사용자]: 결과 표시
[사용자] -> [주문관리]: 주문 요청()
[주문관리] -> [결제시스템]: 결제 처리()
  • 객체 간 호출되는 순서와 관계를 명확히 분석 가능

 


4. 클래스 다이어그램 (Class Diagram)

 

개념

시스템 내 객체들의 속성(Attributes), 메서드(Operations), 관계를 정의하는 정적 구조 모델링

객체의 설계 구조 및 상속 관계를 시각적으로 표현하여 개발 시 참조 가능

 

주요 구성 요소

  1. Class(클래스): 속성과 메서드를 포함하는 개념적 개체
  2. Attributes(속성): 클래스가 가지는 데이터
  3. Operations(메서드): 클래스가 수행하는 동작
  4. Relationships(관계):
    • 연관 관계 (Association): 객체 간의 일반적인 관계 (─)
    • 상속 관계 (Inheritance): 객체가 다른 객체를 상속받는 관계 (▷)
    • 집합 관계 (Aggregation): 부분-전체 관계 (◇)
    • 복합 관계 (Composition): 더 강한 종속 관계 (◆)

 

예제

  • 온라인 쇼핑몰의 클래스 다이어그램 예시
+----------------+
|  사용자(User)  |
+----------------+
| -이름         |
| -이메일       |
+----------------+
| +로그인()     |
| +회원가입()   |
+----------------+
        |
        ▼
+-----------------+       +------------------+
|  주문(Order)   | 1 ───▶ |  상품(Product)   |
+-----------------+       +------------------+
| -주문번호       |       | -상품명          |
| -주문일자       |       | -가격            |
+-----------------+       +------------------+
| +결제()        |       | +재고확인()       |
+-----------------+       +------------------+

 

  • User와 Order는 1:N 관계, Order와 Product는 1:N 관계

 


 

오늘의 배운 점 정리

  • OOA(객체지향 분석) → 문제 도메인을 분석하고 객체를 정의하는 과정
  • OOD(객체지향 설계) → OOA에서 도출한 객체를 기반으로 시스템 내부 구조를 설계하는 과정
  • OOA가 요구사항 분석을 담당하고, OOD가 실제 개발을 위한 설계를 담당
  1. Use-Case 다이어그램을 통해 사용자 요구사항을 분석하고 시스템 기능을 정의한다.
  2. 시퀀스 다이어그램으로 객체 간의 동적 메시지 흐름을 표현하여 시스템 동작을 이해한다.
  3. 클래스 다이어그램을 활용하여 시스템의 정적 구조를 모델링하고 객체 관계를 설계한다.
  4. UML 다이어그램을 활용하면 객체지향적인 소프트웨어 개발이 더욱 명확하고 체계적으로 진행될 수 있다.