1. 객체지향 프로그래밍(OOP) VS 절차지향 프로그래밍(PP)
오늘은 sw프로그래밍 분야에서 자주 보이는 단어, 절차지향언어와 객체지향언어에 대해 알아보고 이 둘을 비교해보려고 합니다.
절차지향 프로그래밍 (Procedural Programming)
절차지향이란, 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입니다.
절차지향 프로그래밍(Procedural Programming) 특징
- 대표적인 예로는 C언어가 있습니다.
- 컴퓨터의 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빠리 처리되어 시간적으로 유리합니다.
- ex) 규모가 크지 않고 재사용할것을 고려하지 않은 프로젝트에 사용
절차지향 프로그래밍(Procedural Programming) 장점
- 객체나 클래스를 만들 필요 없이 바로 프로그램을 코딩할 수 있다.
- 필요한 기능을 함수로 만들어 두기때문에 같은 코드를 복사하지 않고 호출하여 사용할 수 있다.
- 프로그램의 흐름을 쉽게 추적할 수 있다.
절차지향 프로그래밍(Procedural Programming) 단점
- 각 코드가 매우 유기성이 높기 때문에 수정하기가 힘들다.(새로운 데이터나 기능을 추가하기가 어려움)
- 프로그램 전체에서 크드를 재사용 할 수가 없어 프로젝트 개발 비용과 시간이 늘어날 수 있다.
- 디버그(오류 검사)가 어렵다.
객체지향 프로그래밍(Object Oriented Programming)
객체지향 프로그래밍에서는 데이터와 절차를 하나의 덩어리로 묶어서 생각하게 됩니다. 예를들어 컴퓨터의 부품을 하나씩 사다가 컴퓨터를 조립하는 것과 같은 방법입니다.
옛날에는 하드웨어와 소프트웨어의 개발 속도 차이가 크지 않았지만 소프트웨어 언어의 발달과 컴파일러의 발달로 하드웨어가 소프트웨어의 발달을 따라오지 못하는 상황이 발생했습니다. 이는 객체지향 언어가 등장하게 되는 계기로 작용했습니다. 객체지향 프로그래밍은 개발하려는 것을 기능별로 묶어 모듈화를 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용하기 때문에 하드웨어의 처리양을 획기적으로 줄여주었습니다.
이론적으로만 본다면 객체지향언어는 절차지향 언어에 비해 장점이 많습니다. 하지만 프로그래밍을 할 때 항상 객체지향언어만 사용하는 것은 아닙니다. 객체지향언어는 어떤 모듈에 있는 하나의 기능만 필요하더라도 모듈전체를 가져와야 하기 때문에 절차지향 프로그래밍보다 프로그램 사이즈가 더 커질 수도 있습니다. 또한 데이터에 대한 접근도 장대적으로 절차지향식보다 느려질 가능성이 많습니다. 메소드를 통해서만 접근이 가능하기 때문에 절차지향식 처럼 특정 함수에 접근할 수 없고, 식으로만 접근이 가능해 속도적인 측면에서 불이익이 있습니다.
객체지향 프로그래밍(Object Oriented Programming) 특징
1. 캡슐화
데이터와 알고리즘을 하나로 묶어 하나의 캡슐처럼 만드는 것입니다. 이 특징 때문에 데이터와 코드의 형태를 외부에서 알 수 없습니다.
당연히 캡슐화되어있지 않은 데이터와 코드는 사용하기 어렵습니다.
2. 상속
부모가 자식에게 유전자를 물려주듯, 상위 클래스의 모든것을 하위 클래스가 이어 받는 것 입니다.
3. 다형성
상속과 연관된 개념으로, 하나의 객체가 다른 여러 객체로 재구성되는 것입니다.
부모가 쌍둥이 자식을 낳으면 부모의 유전자가 두명의 자식으로 재구성되는 것과 같은 이치입니다.
하지만, 그렇다고 해서 두 쌍둥이(재구성된 객체들)의 유전자가 부모(원 객체)의 유전자와 똑같다고 볼 수는 없습니다.
자바의 오버로드, 혹은 오버라이드 다형성이 이 다형성을 드러내는 대표적인 예입니다.
4. 추상화
실존하는 객체의 여러 특성 중, 프로그램을 만드는데 필요한(공통적인) 부분만 파악해서 추출하고 필요하지 않은 것은 제거하는 것입니다.
객체지향 프로그래밍(Object Oriented Programming) 장점
1. 재사용성
'상속'이 가능하기 때문에 코드를 재사용할 수 있어 편리합니다.
2. 생산성 증가
컴퓨터가 고장났을 때, 문제가 되는 부품만 수리하면 다시 정상가동됩니다.
마찬가지로 독립된 객체로 이루어져있기 때문에 생산적으로 작업할 수 있고, 유지 및 보수가 용이합니다.
3. 자연스러운 모델링
앞서 말했듯, 객체는 세상에 존재하는 모든 것입니다. 객체지향언어 자체가 우리가 사는 세상을 닮았기 때문에 개발자가 생각하는대로 자연스럽게 구현할 수 있습니다.
객체지향 프로그래밍(Object Oriented Programming) 단점
1. 느린 개발 속도
모든 객체의 역할과 기능을 이해해야 하기 때문에 프로그래밍에 많은 시간이 소요됩니다.
2. 느린 실행 속도
객체지향언어의 처리 속도는 절차지향언어보다 느립니다.
차이점
객체지향 역시 절차 지향과 동일한 순서로 실행됩니다. 다만 절차지향은 데이터를 중심으로 함수를 구현하고, 이에 반해 객체지향은 기능을 중심으로 메소드를 구현하게 됩니다.
절차지향 프로그래밍을 사용한다면, 말 그대로 실행순서, 절차가 더 중점이 되고, 객체지향 프로그래밍을 사용한다면, 필요한 객체들의 종류와 속성등이 더 중점이 됩니다.
이상으로 객체지향 프로그래밍과 절차지향 프로그래밍에 대해 알아보았습니다.
객체지향의 반대는 절차지향이 아니고, 절차지향의 반대는 객체지향이 아닙니다.
서로의 장단점이 존재하고 용도가 각각이 다른 프로그래밍 방법이라는 것을 알게 되었습니다.
이상 글을 마치도록 하겠습니다.