본문 바로가기

글/코딩

[코딩] OOP, 객체 지향 프로그래밍에 대해

반응형

 

 최근 사내 교육자료를 준비하던중 문득 궁금해진게 있다.

 

코딩을 처음 제대로 배워본건 대학교때 전공수업으로 있던 C++ 수업이었다.

당시 조교님이 이런저런 내용들을 설명하며 C와 C++의 가장 큰 차이는 객체지향이라고 역설하던 모습이 생각이 난다. (물론 그 의지만큼 수업 내용도 끔찍했다.)

 

여튼, 결국 객체지향이라는게 클래스를 기반으로 한 객체를 중심으로 필요할때마다 내장된 속성을 끌어와서 사용하는 방식의 코딩을 말하는 것인데 문득 객체지향이 아닌건 뭔지 궁금해졌다.

나야 태어나서 처음 본 코드가 이미 객체지향 코드인데 궁금할 수 있지않은가?

 


 

 크게 구분하자면 절차지향 프로그래밍과 객체지향 프로그래밍으로 나눠지는 것 같다.

 

절차지향과 객체지향으로 구분된다.

 

반응형

 

절차지향 프로그래밍

 

 절차지향 프로그래밍(Procedural Programming)은 프로그램을 함수의 집합으로 생각하는 프로그래밍 패러다임이다. 절차지향 프로그래밍에서는 프로그램을 수행하기 위한 일련의 단계를 함수로 나누어 구현하는데, 객체의 단위로 나눠서 생각한다는 점에서 객체지향과의 차이가 있다.

 

절차지향 프로그래밍의 몇가지 주요 특징을 보자면 아래와 같다.

 

  • 프로그램의 구성 단위가 함수
  • 설계관점은 함수의 순차적 실행으로 구성됨
  • 프로그램의 구조는 함수의 호출로 이루어짐

우리가 흔히 쓰는 코드들은 모두 절차지향을 지원한다고 보면 되며, 특히 짧은 코드를 Class 개념 없이 사용할때는 항상 절차지향 방식으로 코딩한 것이라고 생각하면 될 것 같다. 

 

 함수의 순차적 실행을 중심으로 프로그램을 설계하기 때문에 코드가 간결하고 이해하기 쉬우며 함수를 재사용하여 중복 코드를 줄일 수 있으므로 프로그램의 실행 효율성을 높일 수 있다는 장점이 있지만 프로그램이 복잡해지면 함수의 호출 관계가 복잡해져 코드의 이해도가 떨어질 수 있고 프로그램이 변경되거나 확장될 때 기존 코드를 수정해야 한다는 번거로움이 있어서 전반적으로 복잡하고 개발중인 코드에 적합하지는 않다고 보면 된다.

 

 

 

객체지향 프로그래밍

 

 객체지향 프로그래밍(Object-Oriented Programming)은 프로그램을 객체의 집합으로 생각하는 프로그래밍 패러다임이다. 객체는 속성과 메서드로 구성된 독립적인 단위로, 클래스를 통해 생성할 수 있으며 아래와 같은 특징을 갖는다.

 

  • 프로그램의 구성단위는 객체
  • 프로그램의 설계관점이 객체간의 상호작용
  • 프로그램의 구조가 객체의 결합으로 구성 객체를 조합해서 프로그램 제작)

 

 객체지향 프로그래밍은 절차지향 프로그래밍 대비, 복잡한 프로그램의 구성이 수월하고 객체를 추가하면서 프로그램 확장에 유리하며 향후 유지보수 측면에서도 훨씬 유리하다. 또한, 캡슐화라고 부르는 개념으로 객체의 구현방식을 외부에서 숨겨서 보다 안정성이 높은 코드를 개발할 수 있다는 장점도 가지고 있다.

다만 직접 체감하기는 어렵지만 프로그램 실행 속도가 좀 느릴 수 있으며 설계 난이도가 훨씬 높고 메모리의 사용량이 크다는 단점이 있다. 지속적으로 개발중이거나, 좀 거대한 규모의 프로그램을 제작할때 유리한 방식이라고 생각하면 될 것 같다.

 

 

 


 

 

결국 어느 한가지 방식을 고집하는건 아니고, 두가지 방식을 알게모르게 다 사용하고있다고 보면 될 것 같다.

애초에 코더가 아니니 그렇게까지 수준높은 코딩을 하지 않는 나에게는 객체지향 방식이 고집될 이유도 적기도 하다.

반응형