본문 바로가기
Portpolio/webdev_tip

c언어와 c++의 차이는?

by Peter Choi 2023. 5. 2.
반응형

보통, 컴공에 입학하면 C언어를 1학년 때 배우게 된다. 1학년 때 C언어 실습하다 보면, 2학년 3학년 때는 그런 C언어를 가지고 여러 실습 과목들을 수강하고 4학년 때는 임베디드나 운영체제 쪽으로 진로를 잡지 않는 한 거의 접하지는 않게 된다.

 

요새는 python으로 많이 바뀌는 추세라고 하긴 한다. 그러나 c언어는 생각보다 쉬운 언어가 아니다. c언어 자체가 unix 시스템을 위한 언어이다. 과거에는 범용os가 없고 하드웨어마다 그 하드웨어에 종속적인 프로그램을 짜던 시대적 상황이었다.

 

그런 시대적 상황에서 "범용" os인 unix가 만들어졌고, 그 unix에서 쓸 언어로 c언어가 탄생한 것이다.

 

unix가 나왔고 그 시스템을 위해 나온 언어가 C언어였기 때문에, 고수준 언어 중에서 가장 과거의 형태를 그대로 가지고 있고, 가장 하드웨어에 근접하기에 인간 입장에서 그렇게 친절한 언어는 아니다.

 

우선 C언어는 절차지향 언어이다. 객체지향은 요새 많이 언급되고 있는데 이 객체지향 언어의 탄생 배경 역시 절차지향 언어에 대한 불편함으로 인한 것임을 이전 글에서도 언급한 적이 있다.

 

 절차지향은 순서에 매우 종속적이며, 직관적이지 못하다는 특성이 있다. 인간의 지식은 축적되는 과정에서 절차지향인 함수형 습득의 과정을 거친다. 

 

이를테면 로마 제국 서구권에서 그리스도교 공인 이후 삼위일체라는 개념을 정립하기 위해서 줄줄이 길어지는 문장을 줄이기 위해 당시의 신학자들이 모여서 다음과 같은 두 문장으로 결론내렸다.

 

하나님의 신격에 삼위가 계시는데 성부와 성자와 성령이십니다. 이 삼위는 한 하나님이시며 본체가 하나요 권능과 영광이 동등합니다.

 

주후 325년 니케아 공의회에서 나온 삼위일체라는 신론의 교리인데 처음에는 단어 하나하나에 수많은 variation이 있던 개념을 최대한 정확하고 간결하게 표현하고자 하는 시도 끝에 두 문장으로 정리하며 그것을 결과적으로 "삼위일체"라는 객체로 한 단어로 정리할 수 있게 된다.

 

프로그래밍 언어 얘기하다가 뭔 종교 얘기라는 생각이 들겠지만 이게 객체지향의 정수이다. 그리고 절차지향의 한계를 나타낸다. 결국 순서에 종속되고 수많은 시간과 노력을 할애하기에 인간의 본성적으로 학문이 발전되면서 객체지향의 원리가 적용되었고, 프로그래밍에서도 발달과정을 통해 객체지향의 원리가 부각되고 자바나 c++이 그 산물인 것이다.

 

가장 유명한 힘에 대한 공식인 F = ma 라는 수식에서도, 힘과 질량과 가속도라는 3요소를 가지고 곱에 대한 식으로 정리했는데, 모든 힘이 다 여기에 딱 맞춰지지는 않는다. 그러나 가장 본질적인 의미를 표현하면, 위와 같이 나온다.  

 

그래서 c++이 탄생한 것이다. 그래서 c++에서는 표준 템플릿 라이브러리(STL)같은 요소가 추가적으로 들어간다. 

 

  

 

반응형

댓글