절차적 프로그래밍(PP) vs 객체지향 프로그래밍(OOP)

주형(Jureamer)·2022년 4월 19일
0

절차적 프로그래밍(Procedural Programming)이란?

절차적 프로그래밍이란 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며
프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다.
이는 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리하다.

절차적 언어의 종류

  • C, 포트란 등

장점

- 컴퓨터의 처리구조와 유사해 실행속도가 빠르다.
- 프로그램의 흐름을 쉽게 추적할 수 있다.

단점

- 각 코드가 매우 유기성이 높아 유지보수가 어렵다
(새로운 데이터나 기능을 추가하기 어려움, 부분 고장 시 전체 고장으로 확대)
- 실행순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다.
- 디버깅이 어렵다.

객체지향 프로그래밍(Object Oriented Programming)이란?

객체지향은 실제 세계를 모델링하여 소프트웨어를 개발하는 방법이다.
객체지향 프로그래밍에서는 "데이터와 기능이 함께 있다"라는 원칙에 따라 메소드와 속성이 존재한다.

객체지향 언어의 종류

  • 시뮬라67(최초), Java(대표적), C++, C#, Python 등 (Javascript는 객체지향으로 작성 가능)

특징

1. 캡슐화

  • 데이터와 기능을 하나의 단위로 묶는 것
  • 은닉: 구현은 숨기고, 동작은 노출시킴
  • 느슨한 결합(Loose Coupling)에 유리: 언제든 구현을 수정할 수 있다.

2. 추상화

  • 공통의 속성이나 기능을 묶어 이름을 붙이는 것
  • 필요한(공통적인) 부분만 파악해서 추출하고 필요하지 않는 것은 제거
  • 클래스 정의 시, 메소드와 속성만 정의한 것을 인터페이스라 부른다. 이것이 추상화의 본질이라고 할 수 있다.

3. 상속

  • 부모 클래스(base class)의 특징을 자식 클래스(derive class)가 물려받는 것
  • 자식이 부모의 기능과 속성을 중복해서 가져야할 때는 상속을 통해 물려받고 추가적으로 필요한 기능만 추가할 수 있다.

4. 다형성

  • 한 객체가 다른 여러 형태(객체)로 재구성 되는 것
  • 자바의 Overload, Override이 다형성의 대표적인 예다.
  • Overload는 하나의 클래스 안에 같은 이름의 메소드를 여러 개 지닐 수 있는 것
  • Override는 상속받은 메소드를 재정의하여 기능을 확장하여 코드의 중복을 줄일 수 있는 것

장점

- 모듈화, 캡슐화로 인해 유지보수에 용이하다.
- 객체지향적이기 때문에 현실 세계와 유사성에 의해 코드를 이해하기 쉽게 만든다.
- 객체 자체가 하나의 프로그램이기에 재사용에 용이하다

단점

- 대부분의 객체지향 프로그램은 속도가 상대적으로 느려지고 많은 양의 메모리를 사용하는 경향이 있다.
- 코드를 설계하고 작성하는데 절차적 프로그래밍에 비해 많은 시간이 소요된다.

끝으로

객체지향 프로그래밍과 절차적 프로그래밍은 상반된 개념이 아니다.

소프트웨어의 발전에 따라 절차적으로 짜여진 코드의 규모가 커졌고,
순서도가 꼬이면서 사람들이 읽기 힘든 '스파게티 코드'가 증가되는 문제가 대두되었다.
이를 해결하기 위해 모듈화, 캡슐화 등으로 재사용성을 높인 객체지향 프로그래밍의 패러다임 등장한 것이다.
모든 언어는 절차적이고 거기에 객체지향적인 관점을 추가하게 되었을 때 객체지향적 언어라고 불린다.

Reference

profile
작게라도 꾸준히 성장하는게 목표입니다.

0개의 댓글