Devxplorer - 부업·재테크 자동화 프로젝트

지루한건 로봇에게 시키고 당신은 생각만 하세요.

Devxplorere 자세히보기

IT (IT)🤖🧠/Object Oriented Programming

Software Development : Object Oriented Programming

데브엑스플로러 2024. 3. 11. 22:44
728x90
반응형

Software Development는 현실 세계의 문제를 컴퓨터 안에서 Software로 푸는 것이다. 이 때, Software Development를 Procedural Programing (SASD)을 통해 문제를 풀지, Object Oriented Programming (OOAD)을 통해 문제를 풀지 선택 할 수 있다. 소프트웨어 개발은 요구 사항을 수집하고, 요구 사항을 달성하기 위해 프로그램을 디자인하고, 유지 보수하는 것이다. 컴퓨터나 디지털 기기에서 실행되도록 배포하는 것까지 의미한다. 실제 프로그램이 수행되는 물리적인 환경까지 고려되어 수행될 수 있도록 해야 한다. 소프트웨어 설계 시, 하기의 프로그래밍 방식을 고려해 볼 수 있다.

1. Procedural Programming : SASD

절차 지향 프로그래밍으로 순서에 따라 프로그램이 구성된다. 프로그램을 작성할 때 주로 Procedure 또는 Function를 사용하여 프로그램 로직을 설계하고 구성하는 방식을 의미한다. 이 방식은 프로그램을 작성할 때 일련의 단계적인 절차를 따라가며 작업한다. C 언어가 이에 대한 대표적인 언어이다. 전통적인 소프트웨어 개발 방법으로 Top Down으로 문제를 해결해 나간다.

수행되어야 할 Function들이 순차적으로 호출 된다. 각각의 코드가 유기적으로 연결되어 있어 유지보수와 분석에 어려움이 있고, 변경점 반영 시, 하나의 모듈에만 영향을 미치지 않고, Code 전체에 영향을 주게 된다.

Function은 Procedural Programing의 핵심 요소이다. 특정 작업을 수행하는 코드 블럭을 나타낸다. 이러한 함수들은 입력 Data를 받아 처리하고 결과 Data를 반환한다. 이러한 Function들은 프로그램에서 재사용할 수 있다.

C와 같은 언어에서 널리 사용되었으며 여전히 Legacy 시스템에서 사용되고 있다. 그러나 최근에는 OOP 객체지향 프로그래밍과 같은 방법이 더 많이 사용된다.

Procedural Programing 장점

  • 실행 속도 : 일부 상황에서 바른 실행 속도를 가질 수 있다. 특히 하드웨어 리소스가 제한된 환경에서 성능 문제가 덜 발생할 수 있다.
  • 단순성과 직관성 : 코드가 순차적으로 실행되기 때문에 이해하기 쉽고 직관적이다. 복잡한 객체나 클래스의 개념 없이도 프로그램 작성이 가능하다.
  • 메모리 효율성 : 함수 호출 스택이 낮고, Virtual Function을 사용하지 않아 메모리를 효율적으로 사용할 수 있다.

Procedural Programing 단점

  • 유지보수 어려움 : 규모가 클 수록 코드의 복잡성이 증가하고, 유지보수가 어려울 수 있다. 코드의 일부를 수정하면 다른 부분에 예상치 못한 영향이 미칠 수 있다.
  • 재사용성 제한 : 코드의 재사용성이 떨어질 수 있다. 함수가 많아 중복이 발생 할 수 있다.
  • 확장성 제한 : 새로운 요구사항에 대응하기 위해 변경점이 많을 수 있다.

Procedural Programing은 직관적이지만, 큰 규모의 Software에서는 유지 보수성과 재 사용성, 확장성 측면에서 제한이 있을 수 있다.

2. Object Oriented Programming : OOP

OOP는 객체 간의 유기적인 관계를 프로그래밍 하는 것이다. 실제 모델에서 객체를 모델링하고, 객체 간의 Communication에 초점을 맞춘다.

Object 는 Data와 Operation으로 구성하고, Object 커뮤니케이션 은 Object간의 operation을 Call 하면서 서로의 Data를 Access 하게 한다. Object간 커뮤니케이션을 통해 시스템이 제공해야 하는 요구 사항을 달성하며, 고객에게 기능을 제공한다.

OOAD (Object Oriented Analysis and Design) 는 OOP를 달성하기 위한 소프트웨어 개발 방법론이다.

OOA (Object Oriented Analysis) 는 요구사항을 정의하고, 이 요구사항을 달성하기 위한 Object를 추출하고 Object간의 대략적인 관계를 그려 Domain Model을 작성하여 구체적인 개발에 도움을 준다.

OOD (Object Oriented Design) 는 Object들을 Class로 정의하고, 이들 간 상호작용을 통해 요구사항을 달성하지는 정의한다. Class를 정의하고, Class 간의 관계를 Static Model로 표현하며, Object간의 상호작용을 Dynamic Model로 표현한다.

OOA 과정에서 Use Case를 정의하고, 이 Use Case를 달성하기 위한 추상적인 객체들을 나열해보고, 대략적인 관계를 작성한다. 이렇게 추상적인 Model을 Domain Model이라 하며, 이는 개발자간 상호 커뮤니케이션을 활발하게 할 수 있도록 도움을 주고, 시스템에 대한 이해를 돕는다.

이러한 추상적인 Domain Model에서 객체들 간 상호작용을 Interaction Diagram으로 표현한다. Sequence Diagram을 주로 작성한다. 상호작용을 Operation으로 정의하고, 이를 Class로 옮긴다. 이를 통해 구체적인 Class로 작성한다. 이러한 과정을 통해 추상적인 Obejct가 구체적인 Data와 Operation을 갖는 Class로 유도된다.

Object Oriented Programming 장점

  • 모듈화와 재사용성 : OOP는 코드 모듈화하는데 도움을 주며, 클래스와 객체를 사용하여 관련 데이터와 동작을 캡슐화 한다. 이렇게 모듈화 된 코드는 다른 프로젝트에서 재사용할 수 있어 개발 속도를 높이고 코드의 재사용성을 높인다.
  • 유지보수 용이성 : 객체 지향 코드는 각 객체가 독립적으로 작동하므로 수정 또는 확장이 쉽다. 캡슐화와 추상화로 인해 코드의 일부를 변경하더라도 다른 부분에 미치는 영향을 최소화할 수 있다. 객체를 사용하여 현실 세계의 개념을 모델링 할 수 있다. 이로 인해 코드가 직관적이다.
  • 유연성 : 다형성을 사용하여 하나의 인터페이스나 추상 클래스를 통해 다른 클래스의 객체를 처리할 수 있다.

Object Oriented Programming 단점

  • 성능 : 객체 지향 코드는 실행 시간과 코드 사이즈 측면에서 오버헤드가 발생 할 수 있다.
반응형