Software Development Methodology
- 소프트웨어를 개발하는 건 쉬운 일이 아니다.
- 그냥 뭐 뚝딱 만든다고 만들어지는 게 아니며, 여러가지 과정을 거쳐야 한다.
- 세부적으로 나눌 수 있지만, 대표적으로 3가지 과정을 거친다.
- 자연어를 통해 문제를 알아보고 확인한다.
- 프로그래밍 언어를 통해 문제에 대한 해답을 작성해낸다.
- 실제 환경에서 돌려보면서 잘 작동하는지 확인한다.

- 이 3가지 과정을 어떻게 구성하는지에 따라서 대표적으로 SASD와 OOAD로 나뉜다.
SASD(Structured Analysis and Structure Design)
Procedural Programming
- 절차 지향 프로그래밍이다.
- 변수 값을 변경하거나, 새로운 값 추가, 기존 값 삭제 등을 통해 순서대로 작동하도록 만드는 방법이다.
- 절차 지향 프로그래밍에서 중요한 건 순서와 변경값이다. 이에 따라 알고리즘과 데이터 구조가 중요해진다.
- 대표적인 언어로 C가 있다.

SASD for Procedural Programming
- 위에서 말한 절차 지향 프로그래밍에 대응되는 방법이다.
- 제일 중요한 건, 순서가 있다는 것이다.
- 순서에 따라 작동하는 일들을 잘 정의하여 프로그래밍 하는 것이 바로 SASD이다.
- 큰 단위에서 시작해서 점점 작은 단위로 쪼개는 경우가 많다.

OOAD
Object-Oriented Programming
- 객체 지향 프로그래밍이다.
- 순서대로 작동하는 것이 아니라, 내가 원하는 방식에 따라 작동하는 방식이다.
- 객체 지향 프로그래밍에서 중요한 건 Object와 Object communication이다. 객체와 객체들간의 통신이 제일 중요하다.
- 객체는 데이터와 오퍼레이션으로 구성되어있다. 여러가지 변수값들과 기능들이 모아져서 캡슐처럼 하나로 되어 있는 것이 바로 객체이다.
- 대표적인 언어로 C++, Java가 있다.

OOAD for Object-Oriented Programming
- OOAD는 객체 지향 개발방법론으로, 객체를 가지고 개발하는 방법이다.
- OOA는 Analysis 과정이다.
- 전체적인 프로그램의 컨셉과 개념적인 객체를 생각한다.(Domain Model)

- 요구사항을 확인한다.
- 이렇게 만들어진 프로그램을 UML을 통해서 추상적인 모델을 먼저 만든다.(Use-Case Model)
- OOD는 Design 과정이다.
- Analysis 과정에서 만들어진 UML과 모델, 문서들을 보고 실질적인 프로그램을 만든다.
- 정의된 각각의 Class를 만든다.(Class Diagram)
- Class들의 통신 방법 및 기능을 만든다.(Sequence Diagram)

- Waterfall, Agile등 다양한 개발 프로세스 모델이 적용 가능하다.