Software Development
- Procedural Programming(절차 지향 프로그래밍)
- 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
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)를 제공하는 것