[OOAD] #0. Software Development

ZenTechie·2023년 5월 1일
0

study

목록 보기
1/11

Software Development

  1. Procedural Programming(절차 지향 프로그래밍)
  2. Object-Oriented Programming(객체 지향 프로그래밍)

Procedural Programming

  • 프로그램이 절차들로 구성되어있다.
  • 데이터 구조, 알고리즘, 단계들의 순서에 초점을 맞춘다.
    • 알고리즘 : 문제 해결을 위한 일련의 지침들 (Control-Centric)
    • 데이터 구조 : 데이터를 특정한 방식으로 조직화하는데 사용되는 구조 (Data-Centric)
  • 대부분의 컴퓨터 언어들은 절차지향적 언어이다.(ex. C)

SASD

  • Structured Analysis and Structured Design
    • 전통적인 절차지향적 프로그램을 위한 개발 방법론이다.
    • Top-Down과 Divide & Conquer 방식으로 구조를 모델링한다.
      • 큰 것을 작게 나누고, 복잡한 문제를 작고 쉽게 나눈다.
    • DFD를 사용한 문제의 기능적 관점이다.
    • FSM을 사용하여 기능을 제어한다.

DFD : Data Flow Diagram
FSM : Finite State Machine

Object-Oriented Programming

  • Object로 구성된 프로그램이다.
    • Object와 그들 사이의 communication에 초점을 맞춘다.
      • Object : data와 operation(=function)의 구성
      • Object Communication : Object가 다른 객체의 Operation을 호출한다.
  • Object Communication을 통해서 System Functionalities를 제공한다.
    • 외부에 노출되는 data flow가 없다.
    • Objects 사이의 Communication Sequence만 보인다(존재한다).

OOAD

  • Object-Oriented Analysis and Design
    • 객체 지향적 프로그램을 위한 개발 방법론이다.
    • OOA와 OOD로 이루어져있다. ( OOA + OOD )

OOA (Object-Oriented Analysis)

  • Object를 찾는 단계이다.
  • Discover the domain concepts/objects

OOD (Object-Oriented Design)

  • Model을 만드는 단계이다.
  • Software Objects를 정의한다. (static)
  • 요구사항을 모두 만족하면서 어떻게 상호작용하는지 정의한다. (dynamic)

OOA 단계에서는 Domain Model과 Use-Case Model을 구현한다.
OOD 단계에서는 Sequence Diagram과 Class Diagram을 구현한다.

Software Process Model

생명 주기 모델(SDLC)이라고도 한다.

  • High-Quality Software를 체계적으로 설계하는데 필요한 다양한 활동, 행동, 업무, 산출물들의 집합을 정의한다.
  • 누가 무엇을, 언제, 어떻게 하는지를 정의한다.
  • Waterfall Model과 Iterative Model로 구성된다.

Waterfall Model

  • 전형적인 소프트웨어 개발의 생명 주기 모델이다.

언제 사용하면 좋은가?

  • 요구사항이 변하지 않을 때 ( Fixed Requirements )
  • linear, 즉 일차원적, 직선적인 방식으로 업무를 완수할 수 있을 때

    Requirement Analysis → System Design → Implementation → System Testing → System Deployment → System Maintenance

Iterative Model - Agile

  • Agile 방법론은 신속한 prototyping과 신속한 개발 경험에 중점을 두는 방법론의 집합을 의미하는 포괄적인 용어이다.
    • 문서화 및 과정 측면에서 경량화
    • XP와 TDD가 속한다.

XP : eXtreme Programming (가장 극단적인 Agile)
TDD : Test Driven Development

Agile의 특성

  • Iterative (Several Cycles)
  • Incremental (not delivering the product at once)
  • Actively involve users to establish requirements
  • Evolutionary

Agile 선언문

Agile이 왼쪽과 오른쪽 중 왼쪽에 더 가치를 둠을 의미한다.

  • Individual over processes and tools
  • Working software over documentation(=Waterfall)
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

Agile에서 Documentation을 하지 않는다는 것은 아니다.
단지 중요도가 상대적으로 떨어지는 것 뿐이다.

Iterative Model - UP

  • UP의 기본 베이스는 Agile이다.
  • Rational Unified Process (RUP) 또는 UP라고도 한다.
    • Iterative (Incremental, Evolutionary)
      • 각 주기는 작은 Waterfall cycle을 포함한다.
    • Risk-driven / Client-driven / Architecture-centric
    • Use-case-driven
  • Well-defined & Well-structured software engineering process
    • 4 Phases & 9 Disciplines

UML

  • Unified Modeling Language의 약자
  • Visual Language for specifying, constructing and documenting the artifacts of systems.
  • 즉, 모델링 언어(Modeling Language) 를 합쳐놓은 것이다.

3 ways to apply UML

  • Sketch
  • Blueprint
  • Programming language

Idea of UML

하나를 가지고 전체를 만들기 보다, 서로 다른 작은것들로 겹치게 만들어서 크게 만드는게 낫다.

What the UML is Not?

  • UML은 Object-Oriented analysis and design process가 아니다.
    • UML은 소프트웨어 시스템을 개발하는 시스템적인 방식이 아니다.
  • UML은 Object-Oriented하게 생각하는 방법을 알려주지 않는다.
    • 어떻게 Object 구조를 설계해야 하는지 알려주지 않는다.
    • 당신의 디자인이 좋은지 나쁜지를 알려주지 않는다.

즉, UML은 개발 프로세스가 아니다.
단순히, 구현을 시작하기 전에 사용하는 그림 그리는 방법, 툴이다.

기타

OOAD의 핵심 정수는 다음 4가지이다.

  • Use-Case > Domain Model > Sequence Diagram > Class Diagram

Object Oriented의 기본 아이디어는 다음과 같다.

  • 시스템을 구성하는 Object들의 Communication / Message Passing / Collaboration 을 통해서 시스템이 제공해야 될 Service(System Operation)를 제공하는 것
profile
데브코스 진행 중.. ~ 2024.03

0개의 댓글