ISSAC.Min

[C++ Basic] C++ Basic에 들어가기에 앞서 본문

Programming Language/C++ Basic

[C++ Basic] C++ Basic에 들어가기에 앞서

ISSAC.M 2019. 4. 2. 12:09
반응형

 1. C언어와의 관계


C++이라는 언어와 C와의 언어는 명칭만 보더라도 서로 상관관계가 있습니다. 이것은 C++이라는 이름이 만들어지기 전 즉, C++이 첫 소개되었을때의 명칭을 보면 알 수 있는데 아래와 같다.




'C with classes'에서 볼 수 있듯이 C언어를 기반으로 하여 Class(객체)에 특화된 언어라고 볼 수 있다. 물론 C와 C++의 차이가 Class만 존재하는 것은 아니다.


그러므로 'C와 C++언어는 전혀 다른 언어이다.' 라고 단정 지을 수는 없다. (물론 이름이 비슷하다고 해서 JavaScript와 같이 꼭 밀접한 연관있는 것은 아니다.)


 2. C와 C++의 차이 


그렇다면 C와 C++의 차이점들을 무엇일까.


(1) 절차지향, 객체지향

둘의 언어의 가장 큰 차이는 앞에서 말했듯이 Class(객체)의 차이이다. 일반적으로 C언어절차지향 프로그래밍언어로 분류하고 C++같은 경우 절차지향 + 객체지향이 모두 가능한 프로그래밍언어이다. 


(2) 데이터 보안(캡슐화)

C++의 특징인 Class(객체)에 의하여 발생하는 C언어와 구별되는 차이인데 Object_oriented_Programming(객체지향, OOP)언어는 객체내용에서 개발자가 숨기고 싶은 부분을 외부 접근자가 객체 내부에 접근하지 못하게 하여 정보은닉이 가능하게 되어있다.(접근제어(public, private 등으로))


(3) 함수기반 C, 객체기반 C++

C언어는 Function_Driven 함수 중심의 코딩을 지원하며 C++은 Object_Driven 객체 중심의 코딩을 지원합니다.(C++은 모두 지원)


(4) 오버로딩(Overloding) 가능여부

C언어는 오버로딩을 지원하지 않으나 C++은 오버로딩을 지원합니다. 오버로딩을 간단히 소개하자면 OOP 언어들이 가진 다형성을 말하며 '함수를 중첩으로 사용가능하다.'이라고 생각하면된다.


(5) 충돌방지

기본적으로 Visual Studio(비쥬얼 스튜디오)를 통한 C++ 코딩의 경험이 있다면 using namespace std;를 사용한 적을 볼 수 있을 것이다. 

namespace 사용 예시 중 하나이다. 간단히 설명하자면 헤더파일 <Afunc.h>에 exFunc(x, y)라는 함수가 존재하고 <Bfunc.h>에도 exFunc(x, y)라는 함수가 존재한다면 만약 개발자가 exFunc함수를 사용하였을때 둘 함수는 충돌을 일으키게 된다.

이러한 충돌을 피하기 위하여 namespace를 사용하여 새로이 정의해준다면 둘은 충돌이 나지 않는다.(박철수와 김철수가 서로 다른 사람인 것처럼)


(6) 참조(Reference)

C++는 변수 사이의 참조가 가능하지만 C언어는 불가능하다.(pass by reference)


그 이외에도 C와 C++의 문법 등 많은 차이점이 존재한다.



 3. C++의 역사


<비야네 스트롭스트룹, 아직 살아있다.>


C++은 C언어가 탄생했던 벨 연구소의 연구원 비야네 스트롭스트룹(Bjarne Stroustrup)에 의해서 개발(1979)되었다. 그는 C언어의 특징인 절차지향적이고 구조적인 언어의 특징에 한계를 느꼈고 새롭게 등장한 프로그래밍 방법인 객체지향(OPP) 프로그래밍의 개념을 가진 객체지향 언어인 Simula의 객체의 특징들을 고안하여 C언어에 추가하여 C++이라는 언어가 탄생하게 되었다.


초기 C++ 앞에서 말했듯 C언어에 객체만을 얹여서 사용하였으나 수십년이라는 시간이 지나면서 현재의 C++의 언어가 탄생하였다.



 4. 현재까지 많은 관심을 받는 C++


C++가 등장하고 난 약 30년 후인 현재에도 C++을 사용하는 개발자들은 수 없이 많다. 많은 개발자들이 C++을 찾는 이유는 무엇일까? 


현재까지 컴퓨터공학 교수로 활동 중인 스트롭스트룹은 한 언론사와의 인터뷰에서 이렇게 이야기했다.


사람들은 20여 년 전부터 C++의 종말을 열심히 예측해 왔지만, 

C++는 여전히 성장 중이다. 기본적으로 복잡함을 빠르게 처리하는 데 

있어 C++를 능가하는 언어는 없다. 임베디드, 이미지 프로세싱, 통신 

애플리케이션, 금융 애플리케이션 등 모두 C++가 지배적으로 사용된다. 

애플리케이션 분야에서는 그다지 많이 사용되지 않는다. 구글, 아마존, 

검색 엔진 등 성능이 무엇보다 필요한 영역, 그런 곳이 바로 C++가 사용되는 분야다.


C++은 검색 엔진 또는 임베디드, 그래픽 프로그래밍 등에서 다른 언어와 비교할 수 없을 만큼 뛰어난 성능을 보유하고 있다는 말이다.

익히 삼성과 같이 반도체를 개발하는 회사는 C++을 통하여 하드웨어에 코딩을 한다.(임베디드) 또한 Graphic Programming에서는 필자 또한 OpenJl을 사용하여 그래픽 코딩을 경험한 적이 있다.


현재에도 C++이 아직까지 많은 개발자들이 사용 중이라는 확실한 증거를 볼 수 있는 통계자료를 제공한다.


<2019년 2월 TIOBE 프로그래밍 언어 순위(출처 : TIOBE)>



 5. 글을 마치며


앞에서 나왔던 C++의 특징들을 보면 C++코딩을 꼭 시작하세요! 라는 내용의 포스팅은 아니다. 


필자가 C++코딩을 처음 접한건 대학교 1학년 기초프로그래밍 과목이였는데 상당히 높은 진입장벽을 느꼈다. 물론 개인적인 입장이지만 첫 코딩으로 C++로 접한다면 결코 쉬운 언어는 아니다.


상대적으로 친절하지 않고 싸가지 없는 언어라고 필자는 생각된다. 이유는 여러가지가 있겠지만 철자하나라도 틀리면 Debug 창에서 컴퓨터와 싸우게 되는 언어인데 그만큼 문법적으로 철저하고 딱딱하고 꼬장꼬장하고 전통적인 프로그래밍 언어이다. 


하지만 이러한 언어를 많이 사용하는 이유를 생각하면 C++의 인기가 당연하게도 느껴진다. 



<사실 전공이 전자공학이여서 첫 코딩을 C++로 시작하였지만 첫 코딩으로 C++을 추천하진 않는다 :).....)

반응형