Software Architecture

[OOAD] Procedural programming vs Object-Oriented programming

Linuxias 2018. 5. 20. 16:58
반응형

요즘, Computational Thinking이란 용어가 많이 등장하고 있습니다. 존재하지 않던 용어가 최근들어 새롭게 만들어진 것이 아니라 예전부터 사용되어져 왔으나 최근들어 더욱 부각되고 있는 용어 입니다. Computational Thinking란 'Natural Language를 이용해 정의된 문제를 Programming Language로 문제를 해결하기 위한 사고' 라고 정의하면 좋을 것 같습니다. 이러한 과정이 Software를 개발하는 과정이라고 생각할 수 있겠네요.


Software Development는 Procedural, Object-Oriented Programming으로 2가지 형태로 크게 나뉠 수 있습니다. 


1. Procedural Programming

 - SASD(Structured Analysis Structured Design), 대표적으로 C 언어가 해당된다.

   : SA(Structured Analysis)와 SD(Structured Design)로 나눠서 개발한다. 

 - Procedure/Function 으로 구성.

 - Data와 Function procedure가 독립적.

 - Function 호출 시 필요한 데이터를 전달하는 방식.

 - Data structrue : Data를 관리하고 구성하기 위한 중요한 요소로서 Procedural Programming에 성능에 크게 영향.


 2. Object-Oriented Programming 

 - OOAD(Object-Oriented Analysis Design), C++ / Java 등에 언어가 해당된다.

  : Procedure나 function이 아닌 Object가 주된 요소

    Object는 Data와 Operation들로 구성되어 있습니다.

    Data는 Object 내에 포함되어 있기에 Procedural Programming 처럼 Function에 아무 data나 전달하여 사용할 수 없습니다.

    따라서 Procedural programming 처럼 data의 flow를  확인하기 어렵다.

 - OOA + OOD = Object-Oriented Analysis + Object-Oriented Design

 - OOA : 프로젝트 내에 Object를 찾고 정의하는 과정

 - OOD : OOA 단계에서 정의한 Object 내에 data와 operation을 정의하는 과정


소프트웨어 개발 방법론 이란?

 - Software를 개발할 때 어떻게 개발을 할 것인가를 정의한 여러 방법론들이 존재합니다. Waterfall, Incremental, Iterative(Agile), Rational Unified 등 많은 방법론이 존재하는데요, 최근 들어서 DDD(Data Driven Development)나 TDD(Test Driven Development) 등의 방법론도 새롭게 많이 나타나고 있습니다. 


1. Waterfall

 - 가장 오래된 개발 방법론 중 하나입니다. Waterfall, 즉 폭포를 보면 물이 아래로 떨어지면 다시 위로 되돌아 갈 수 없듯이 이 방법 또한 그와 동일한 방법입니다. 요구사항 분석, 문제 정의, 시스템 설계, 구현, 테스트 등 을 순서에 따라 쭉 진행을 하는 방법입니다.


2. Agile 

- Agile 개발 방법론은 Iterative Model에서 나온? 거의 유사한 개발 방법론입니다. Waterfall 모델은 코드가 나올 때까지 개발 단계에 이러야 하지만 Agile은 시작과 동시에 코드가 구성되어 나타납니다. 요구사항을 분석하면서 Iteration #1, #2, #3... 를 진행하면서 점차 요구사항이 구현되어 나옵니다. 모든 요구사항을 정의한 후 구현하는 Waterfall과는 큰 차이를 보입니다.



Procedural Programming과 Object-Oriented Programming을 간략하게 정리해 보았습니다. 부족한 내용들은 점차 채워나가도록 하겠습니다. 감사합니다.





반응형