C++은 C의 상위호환 목적으로 나온 C에서 확장된 언어입니다. 어느면에서 차이가 나는지 알아보았습니다

 

C나 C++어느 한쪽을 알고 있다는 가정 하에 작성되었습니다.

(만약 C와 C++ 어느 언어를 공부해야 할지 고민중이라면 C를 익히신 후 C++를 공부하시는걸 추천드립니다)


- 추구하는 스타일에서의 차이

 

C는 절차지향 언어이고 C++은 객체지향언어입니다. 

이렇다고 해서 C++을 절차지향 스타일로 사용할수 없다는 뜻은 아닙니다. C++에선

객체지향 방식으로 코딩하기에 더욱 편하도록 확장된 언어입니다.

그렇기에 절차지향의 반대말이 객체지향인것이 아닙니다. 둘이 병행가능합니다

 

절차지향 언어는 단어가 뜻하는 그대로 실행절차를 밟는 순서가 정해져있어 

하드웨어서 처리속도 이점을 가지는 한편, 디버깅 및 유지보수에서 단점을 가집니다

 

객체지향 언어는 무언가를 코딩할때 현세에 존재하는 하나의 객체라고 간주하고 만드는

방식입니다. 이 방식은 지금처럼 하드웨어가 꽤 발전되어버린 지금은 아주 큰

의미를 가지진 않지만 절차지향에 비해 느리지만 코드의 재활용이 가능해

유지보수 및 디버깅에서 이점을 가집니다.

 

※절차지향과 달리 객체지향은 큰 틀로 구분가능한 특징들이 존재합니다.

C와 C++차이에 굳이 언급이 필요한 사항은 아니지만

추후 글에 나올 c와 c++의 struct차이를 위해 객체지향 특징을 간단히 요약만 하겠습니다

 

- 관련 데이터와 함수를 하나로 묶는 행위입니다. 캡슐화라 부릅니다.

- 캡슐화 되어있는 데이터가 접근불가능하게 해서 보안을 올립니다. 정보은닉이라고 부릅니다.

- 객체가 필요한 행동 및 데이터를 추려 구성합니다. 추상화라 부릅니다.

- 부모의 특징을 자식 객체들이 물려받아 사용가능합니다. 상속성이라 부릅니다.

- 필요에 의해 부모의 모습을 할 수도, 자식의 모습으로 행동할수도 있습니다. 다형성입니다.

 

 

 

 - 언어 문법에서 나오는 차이

 

C와 C++을 가장 크게 구분지어주는것은 아마 class가 아닐까 생각듭니다.

하지만 이전에 두 언어에서 공통적으로 있는 구조체(struct)의 차이부터 알아야 합니다

 

기존 C에서의 struct입니다

//C언어 Struct 예시

struct MyStruct
{
	int name;
	int bornYear;
}

MyStruct firstHuman; //불가능
struct MyStruct firstHuman; //가능

▲C에선 struct을 사용시 앞에 typedef를 붙여주지 않는 한 구조체를 만들떄

매번 struct 키워드를 붙여주어야 생성가능합니다

 

 

//C언어 Struct typedef 예시

typedef struct MyHuman
{
	int name;
	int bornYear;
}MyStruct

MyStruct firstHuman; //이제 가능

▲구조체를 선언해 사용하고싶을때마다 앞에 struct 키워드 붙이는걸 방지하고싶으면

별칭을 부여하는 typedef를 이용해 위와 같이 만들면 해결가능합니다

 

C에선 구조체 내에 함수선언이 불가능합니다

 

 

 

이젠 C++에서 struct입니다

//C++ Struct 예시

struct MyHuman
{
	int name;
	int bornYear;
};

MyStruct firstHuman; //typedef없이 가능

▲이젠 typedef없이도 에러가 없는걸 확인가능합니다.

물론 C에서처럼 typedef를 사용해도 가능하긴 합니다.

 

여기서부터 C++은 C와 달리 더욱 확장되어 클래스와 유사한 역할이 가능합니다.

아까 언급한 C에서의 struct와 달리 C++에선 함수선언이 가능해졌습니다

 

이 차이는 작아보이지만 글 맨 위 객체지향이 추구하는 방향중 하나인

캡슐화에 영향을 줍니다. C++에서 struct로 묶인 자료들은 접근지정자를 이용해 

정보 은닉 및 캡슐화도 가능합니다

 

C에는 애초에 상속자체가 없긴 하지만 C++의 struct는 상속도 가능합니다

 


 

언어문법차이에서 namespace 및 오버로딩의 차이도 존재합니다.

 

C에서는 namespace 자체가 없고, 이는 C서 함수이름이 중복될때 에러가 납니다.

C++부터는 namespace가 생겨 협업등 함수중복문제가 발생할 수 있는 부분에 이점을 가지며

C++에서는 파라미터만 다르다면 중복 함수이름을 허용하는 오버로딩 또한 추가되었습니다

 


C++에선 참조자가 등장하였습니다. C나 C++이나 둘 다 포인터 사용이 가능하지만

&기호를 사용하는 참조자는 C에선 없던 개념이며 레퍼런스관리에 용이해졌습니다

 

 

이외에도 alloc 대신 new를 사용해서 메모리 할당을 진행한다던지

템플릿을 사용한다던지 하는 부분들이 있으나 이는 핵심적인 차이는

아니고 언어가 확장됨에 따라 추가된 내용이니 생략하였습니다.

'정보들 > C,C++ 관련' 카테고리의 다른 글

enum VS enum class  (0) 2020.06.23
inline 함수 vs 매크로 함수  (0) 2020.06.23
C++의 캐스팅 4가지  (0) 2020.06.23
bool vs BOOL?  (0) 2020.06.23
push_back vs emplace_back  (0) 2020.06.23

+ Recent posts