C언어와 C++ 차이점 비교 (객체지향과 하향식)

C언어와 C++ 차이점 비교 (객체지향과 하향식)


C++은 C++이란 이름에서 나타나듯, C의 Superset입니다. 그래서 C는 C++의 코드를 실행할 수 없습니다.



1. C는 절차적 프로그래밍(Procedural), C++은 다중 패러다임 언어(Multi paradigm)

C는 프로그램의 함수 간의 단계나 절차에 초점이 맞춰지나, C++은 프로세싱 과정보단, 개별 데이터에 초점이 맞춰집니다. 그래서 C++의 소스 코드를 구현 / 수정하는 것이 더 쉽습니다(상대적으로).


2. C는 데이터의 보안(Secured)이 불가능하나, C++은 데이터의 보안(Secured Hidden)이 가능

구체적으로는 OOP(객체지향 프로그래밍)의 장점이라고 할 수 있습니다. C는 가질 수 없는....


3. C는 low-level 중에서도 중간 수준(middle-level)의 언어

C는 low-level의 언어(해석/설명/이해하기 힘들고, 사용자 중심이 아님)이나, C++은 low-level(하드웨어에 집중)과 high-level(프로그램에 집중)의 특징을 모두 보유합니다.

그래서 C++은 전체 언어 중에서도 중간 수준(middle-level)의 언어로 분류할 수 있습니다.


4. C는 하향식 접근 방식(top-down), C++은 상향식 접근 방식(bottom-up)을 사용

C는 기본 요소 간의 순차적 수행이 되도록 서로 간의 연결이 중요해, 단계별 공식화(linked-together) 이후 세부 사항으로 나뉩니다.


5. C는 함수 기반(function-driven), C++은 객체 중심(object-driven)

C 프로그램은 함수 중심으로 구축되고, C++은 객체 중심으로 구축이 됩니다.


6. C는 지원하지 않는 오버로딩(Overloading)을 C++은 지원

오버로딩은 같은 이름을 가진 두 함수를 의미합니다. OOP의 다형성이란 특성 중 하나입니다.


7. 구조체(Structure) 안에서 함수(function) 사용

C++은 할 수 있지만, C는 하지 못하는 것입니다.


8. NAMESPACE가 C++엔 있으나 C엔 없음

NAMESPACE의 기본 기능은 충돌 방지입니다.


예를 들면, 다른 대학의 두 학생이 같은 학번을 가질 수 있으나, 같은 대학의 두 학생이 같은 학번을 가질 순 없습니다. 같은 대학(one namespace)에서 두 학생을 구분하기 위해 서로 다른 학번(identifier)을 부여하는 의미입니다. 즉, 같은 기능을 중복해 사용하는 것을 막기 위함입니다.


C언어와 C++ 차이점 비교 (객체지향과 하향식)C언어와 C++ 차이점 비교 (객체지향과 하향식)


9. 표준 입출력(standard input & output)의 차이

C는 scanf와 printf를 사용하지만, C++은 cin>>과 cout<<을 사용해 표준 입출력의 차이를 보입니다


10. C++은 참조 변수(reference variable) 허용

참조 변수는 두 변수가 같은 메모리 위치를 참조(reference)할 수 있습니다. 그러나 C에서는 참조 변수를 사용할 수 없습니다.


11. C++은 예외 처리(Exception handling)를 지원

C는 "공식적(Formally)"으론 지원하지 않지만, 다른 방법(user creative method)을 이용해 사용할 순 있습니다. 일반적으론 C에서 사용할 throw&catch 함수는 개인 사용자에게 제공되는 프레임워크엔 포함되지 않습니다.


12. 알파벳이 다릅니다

C의 뜻은, "C language" 이고, C++의 뜻은, "C plus plus language"입니다


13. 두 언어의 제작자가 다릅니다

C는 데니스 리치(Dennis Ritchie)와 친구, 직장 동료들이 만들었고, C++는 뱐 스트라우스트럽(Bjarne Stroustup)과 친구, 직장 동료들이 만들었습니다.


ps. 가장 큰 차이점, c는 발음이 그냥 "씨"지만, c++은 "씨쁠쁠", "씨플러스플러스", "씨쁠" 등으로 불립니다.


C언어와 C++ 차이점 비교 (객체지향과 하향식)

이 글을 공유하기

댓글(10)

  • 가나
    2018.09.19 21:56

    C가 저급언어라뇨

  • 가나
    2019.06.03 17:13

    위에서 말한 데이터 보안이 접근지정자를 말하는 것이라면 C에서 키워드는 존재 하지 않지만 만들수 있습니다. 그리고 C도 객체지향적 프로그래밍이 가능합니다. 하지만 굳이 C++이 있는데 C로 불편하게 객체지향적으로 프로그래밍을 하느냐가 문제가 될것 같네요. xine project 같은 경우도 C를 사용해서 객체지향적으로 구현을 했는데요. 홈페이지 들어가 보시면 어떻게 했는지 자세하게 나와있습니다.

    • 2019.06.03 17:17 신고

      네. 맞습니다.

      실제로 C언어를 객체지향처럼 코딩한 분의 소스도 본 적 있습니다.

      다만, 과도는 과일을 깎기 위한 용도지만 힘겹게 회를 뜰 수도 있을 겁니다. 그렇다면 과도로 회를 뜨는 게 합리적인가? 라고 묻는다면 그렇지 않다고 대답하겠죠.

      전 비슷한 맥락이라고 봅니다. 원래 의도치 않은 용도로 사용할 순 있지만 굳이 그럴 필요가 있느냐는 것이죠.

  • 가나
    2019.06.03 17:25

    사실 저는 초짜에요. 한번 공격적으로 댓글을 달아봤습니다. 근데 답글을 친절하게 해주셔서 제가 죄송하네요.. 죄송합니다. 글 많이 보고 많이 배워 가겠습니다.

    • 2019.06.03 17:50 신고

      아닙니다. 되려 제가 죄송하네요.

      어떤 분야는 C언어를 꼭 사용해야 합니다. 그런 분야에서 C언어를 객체지향처럼 꾸며서 사용할 순 있겠죠.

      제가 그쪽으론 경력이 없어서 속단하긴 어렵습니다. 이럴 때 C언어를 객체지향처럼 작성한 분의 댓글이 달리면 좋으련만 ... ㅎㅎ

  • 2019.06.20 18:09

    2년동안 서버를 ANSI C로 짰는데요, 고성능 하드웨어에 탑재하는 것을 추구하면서 기존 레거시 Unix 시스템에 호환될(?) 목적으로 구현하였습니다. 그리고 동료나 상사나 객체지향이야기 한마디도 안해서 혼자 비스무리하게 짰습니다. C가 C++보다는 미묘하게 성능이 좋다고 알고 있습니다. 갑갑해서 퇴사하려구요 ㅋㅋㅋㅋㅋ

    • 2019.06.21 09:14 신고

      막줄이 핵심이네요 ㅋㅋㅋㅋ 그래도 2년간 좋은 경험 쌓으셨네요. 남들은 만들 수 없는 특별(?)한 경력 ㅋ

  • C언어로 객체지향처럼 작성한 분
    2019.06.21 22:13

    ㅜㅜ 깜박하고 커멘트 까먹은게 있는데 2번, 7번 다 C에서도 가능합니다. 2번은 데이터 은닉 같은데, 헤더에 구조체 포인터만 선언하고 구조체는 소스에 선언한 뒤 다른 모듈에서 함수로 가져와 쓰고, 함수에 static 키워드를 붙이고 헤더에 넣지 않으면 객체지향에서 쓰는 private하고 같은 효과를 누릴 수 있습니다. 7번은 구조체에 함수 포인터 형을 정의해서 쓰면 됩니다. C로 추상화나 상속을 구현할려고 할 때부터 C++보다 훨씬 번거로워지는거죠.

    • 2019.06.24 09:20 신고

      맞습니다!! 되긴 되더라고요.

      저도 따라해 봤었으나, 며칠 해보고 때려친 기억도 나네요. 된다곤 하는데 진짜 되긴 하겠더라고요. 근데 너무 어려움.......

Designed by JB FACTORY