본문 바로가기

전자 공학/C언어 C++

C언어와 C++의 차이점 (절차지향과 객체지향)

반응형

안녕하세요. 취업한 공대누나입니다.

MFC를 공부하던 중 C++에 대한 개념이 너무 취약하다는 것을 깨닫고 C++에 대한 공부를 하고 MFC를 다시 공부해자라는 생각이 들었습니다.

 

C++는 C언어의 발전된 형태라고 할 수 있기 때문에 두 언어는 비슷한 면이 굉장히 많습니다.


1. C언어는 절차지향(Procedural) C++는 객체지향(Multi Paradigm)

대부분의 책, 혹은 사람들이 가장 먼저 말하는 차이점은 이것이 아닐까 싶습니다.

그렇다면 절차지향과 객체지향의 개념에 대해서 알아보고 넘어가보겠습니다.

절차지향 

C언어는 절차지향 언어입니다. 즉 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만듭니다. 객체지향 언어보다 더 빨리 처리되어 시간적으로 유리한 측면이 있습니다.

그리고 정해진 순서에 따라서 실행되기 때문에 실행 흐름을 이해하기가 보다 쉽습니다.

객체지향

C++는 객체지향 언어입니다. 즉 구조화된 프로그램을 짤 수 있는데요.

같은 목적이나 기능을 하는 변수나 함수를 하나로 묶어서 객체로 만들고 이 객체를 이용해서 프로그램 전체가 작동하도록 코드를 구성합니다. 그래서 어느 한 부분이 잘못 동작할 경우 그 부분만 수정하면 해결할 수 있습니다.

처리속도가 절차지향보다 느리고 설계에 많은 시간이 소요되지만 코드의 재활용성이 높다는 장점이 있습니다.

 

그렇다고 두 개념이 반대의 개념이라고 말할 수는 없습니다.

 


2. 오버로딩 

C++에는 같은 이름에 다른 기능을 할 수 있는 오버로딩의 개념이 추가되었습니다.

C언어는 오버로딩을 지원하지 않지만 C++는 오버로딩을 지원합니다.

그렇다면 오버로딩이란 무엇일까요?

 

예를 한 번 들어보겠습니다

int add (int a, int b){

       return a+b;

}

int add (int a, int b, int c)
{
      return a+b+c;
}

두 함수의 이름이 같습니다.

그래서 C언어에서는 오류를 발생시키게 됩니다.

하지만 C++에서는 그렇지 않습니다. C++은 호출하려고 하는 함수를 찾을 때 이름 뿐만 아니라 매개 변수 정보까지 동시에 참조하기 때문입니다.


3. namespace

C++에서는 네임스페이스(namespace)라는 개념을 사용합니다.

C를 배울 때 우리는 식별자의 이름은 같을 수 없다고 배웁니다. 하지만 C++에서는 식별자의 이름이 같을 수 있습니다.

코드 내에서 사용한 식별자가 어떤 네임스페이스에 있는 식별자인지 코드에서 알려준다면 명확하게 구분이 되게 됩니다.


저는 하드웨어 개발자이기 때문에 C언어를 사용해서 프로그래밍을 합니다.

하지만 C++를 공부하는 이유는 다른 여러 언어들을 익혀보고 싶기 때문입니다.

계속 C언어만 해서는 경쟁력이 있을지 과연 의문이 들기도 하구요.

개발자로서 점점 스펙트럼을 넓혀가야 할 것 같은 불안감도 많이 듭니다. 

 

반응형