Peter Ahn
Peter의 우아한 프로그래밍
Peter Ahn
전체 방문자
1,143,658
오늘
188
어제
689
  • 전체 (114)
    • 영어공부 (15)
    • 물생활 (9)
    • 독서 (2)
    • 일상 (1)
    • IT 소식 (15)
      • 최신 기술 소식 (10)
      • 보안 소식 (5)
    • 인공지능 (AI) (2)
    • OS (19)
      • Linux (19)
    • Web (0)
      • Vue.js (0)
    • 객체지향 (1)
      • 개념과 원리 (1)
      • 디자인패턴 (0)
    • 프로그래밍 (34)
      • C (14)
      • C++ (3)
      • C# (1)
      • Python (1)
      • Javascript (1)
      • Bash (4)
      • Vim (9)
    • Database (3)
      • DB2 (3)
      • MongoDB (0)
    • 프레임워크 (1)
      • Ionic (1)
    • Cloud (1)
      • AWS (1)
    • 3D Printer (2)
    • 기록보관소 (5)
    • 초대장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • 프로그래밍의 세계에 오신 것을 환영합니다.

인기 글

  • [Linux] ps 로 실행 중인 프로세스 확인하기
    2020.08.05
    [Linux] ps 로 실행 중인 프로세스 확인하기
  • [bash 쉘 스크립트] 스크립트 실행하기
    2018.06.04
    [bash 쉘 스크립트] 스크립트 실행하기
  • [Linux] cp 또는 mv 로 파일 강제로 덮어쓰기
    2018.05.03
    [Linux] cp 또는 mv 로 파일 강제로 덮어쓰기
  • [bash 쉘 스크립트] 종료(exit)와 종료 상태 (e⋯
    2019.10.30
    [bash 쉘 스크립트] 종료(exit)와 종료 상태 (e⋯
  • [Linux] nohup 세션이 끊겨도 계속 실행되도록 해⋯
    2020.08.18
    [Linux] nohup 세션이 끊겨도 계속 실행되도록 해⋯

태그

  • 리눅스
  • 생활영어
  • 어항
  • c강좌
  • 랜섬웨어
  • 리눅스 명령어
  • call by reference
  • 구피어항
  • AI
  • 리눅스 검색
  • vim
  • 영어 표현
  • bash
  • 영어표현
  • C++
  • C언어 강좌
  • 인공지능
  • Linux
  • 물생활
  • 프로그래밍
  • vim 강좌
  • 영어 회화
  • 하프블랙구피
  • bash shell
  • C언어
  • 딥러닝
  • 구피
  • 쉘 프로그래밍
  • vim 비주얼모드
  • 4차 산업혁명

최근 댓글

  • 좋은 글 정말 감사합니다. 덕분에 얼추 감이 잡히네요 ㅠㅠ⋯
    김케이
  • 언 오더.. 얼어있다. 맞습니다. 해동해야하기 때문에 오⋯
    방구석경비원
  • 명령어뿐만 아니라 친절한 설명 감사드립니다 !!
    AYKO
  • 하트하고 가요.
    나리카페
  • 위키백과나 다른 웹사이트에서 설명 보고 아리송했는데.. ⋯
    국어척척석사

최근 글

  • C 언어와 C++ 의 차이
    2020.08.26
    C 언어와 C++ 의 차이
  • [Linux] nohup 세션이 끊겨도 계속 실행되도록 해⋯
    2020.08.18
    [Linux] nohup 세션이 끊겨도 계속 실행되도록 해⋯
  • [bash 쉘 스크립트] 변수 할당(assignment)과⋯
    2020.08.17
    [bash 쉘 스크립트] 변수 할당(assignment)과⋯
  • [객체지향] Object-Oriented Programmi⋯
    2020.08.14
    [객체지향] Object-Oriented Programmi⋯
  • [Linux] kill 프로세스를 '안전하게' 종료시켜보⋯
    2020.08.07
    [Linux] kill  프로세스를 '안전하게' 종료시켜보⋯

티스토리

hELLO · Designed By 정상우.
Peter Ahn

Peter의 우아한 프로그래밍

C 언어와 C++ 의 차이
프로그래밍/C++

C 언어와 C++ 의 차이

2020. 8. 26. 17:43
반응형

 

 

안녕하세요 피터입니다.

 

많은 분들이 C 언어를 배우고 나서 C++ 를 배우기 시작 할 때 어려움을 겪곤 합니다. 

제 주변에도 그런 분들이 있어서 어떤 점 때문에 어려운지 물어봤더니 어디서부터 어떻게 시작해야 될 지 모르겠다는 답변이 가장 많았습니다. 

 

어쩌면 당연한 일인지도 모르겠습니다. 

비교적 간단한 문법 체계를 갖고 있는 C 언어와 달리 C++ 은 굉장히 다양한 패러다임이 녹아있으며 방대한 스케일을 자랑하는 언어이기 때문입니다. 

 

(물론 그렇다고 해서 C 언어가 가볍고 만만한 프로그래밍 언어라는 말은 아닙니다. 오히려 그 반대로 처음엔 쉬워보이지만 알면 알수록 어려워지는 언어입니다. C 언어는 역사가 긴 만큼 괴수 분들이 많이 서식하고 계십니다 :D)

 

그래서 우선은 C 언어와 C++ 두 언어가 어떤 부분이 다른지 간단하게 살펴보고 넘어가겠습니다.

 

Feature C C++
Paradigm Procedural Language Multi-Paradigm Language
Approach Top down Bottom up
Namespace X O
Inheritance  X O
Overloading X O
Polymorphism X O
Template X O
& reference X O
struct constructor X O
Memory allocation malloc(), calloc(), realloc() new
Memory deallocation free() delete

 

여러 차이점들이 있지만 눈여겨 볼 만한 부분은 C++ 의 Multi-paradigm 이라는 부분입니다. 

 

절차지향 프로그래밍(Procedure-Oriented Programming)을 지원하는 C 언어와 달리 C++ 은 C 언어의 절차지향 프로그래밍을 그대로 승계한 동시에 객체지향 프로그래밍(Object-Oriented Programming)과 일반화 프로그래밍(Generic Programming)을 모두 지원하는 언어입니다. 

 

C 언어의 문법을 그대로 계승했기 때문에 얼핏 보면 큰 차이가 없어 보여 쉽게 접근했는데,

코딩을 하면 할 수록 내가 알던 그 언어와 비슷하면서도 뭔가 잘못되고 있다는 느낌을 받게 되죠. 

(내거인듯 내거아닌 내거같은 너...)

 

그렇게 느낄 수 밖에 없는 것이 객체지향 프로그래밍에 대한 개념을 모르는 상태에서는 C++에서 새롭게 등장하는 객체지향 문법들을 온전히 이해 할 수 없기 때문입니다. 

 

게다가 처음보는 템플릿(template) 문법은 외계어에 가깝게 느껴집니다.

 

C++은 이처럼 여러 가지 패러다임을 지원하는 언어이니 만큼 제대로 사용하기 위해서 배워야 할 개념들이 많습니다.

그래서 배우면 배울 수록 겸손해지는 언어이기도 하죠. 

(괜히 개발자들 사이에서 본인이 C++ 고수라고 하는 사람은 상종도 하지 말라는 말이 있는 게 아닙니다...)

 

 

그렇다면 C++을 어떻게 배우는 것이 좋을까요?

우선은 기존의 Top-down 방식으로 사고를 했던 것에서 벗어나 Bottom-up 방식의 객체지향 개념을 먼저 익히는 것이 좋습니다. 

 

[객체지향] Object-Oriented Programming 핵심 개념의 이해

배경 데이터 흐름(Flow)에 기반한 절차지향적 프로그래밍 방법은 복잡한 로직을 갖는 큰 규모의 소프트웨어 개발에는 적합하지 않습니다. 하드웨어 성능이 폭발적으로 성장하면서 요구되어지는

gracefulprograming.tistory.com

 

객체지향 개념을 이해하고 나서 문법적인 면에서는 클래스(class)와 접근 제한자(access modifier), new, delete 등의 문법을 숙지하셔야 합니다. 

 

기존 C언어에서 malloc(), free() 대신 new, delete 를 사용하면 생성자(constructor)/소멸자(destructor)가 호출되는데 이러한 개념도 익혀두셔야 합니다. 

 

간단한 프로그램을 객체지향적으로 설계하고 구현하는 것을 반복적으로 하다 보면 이제 Bottom-up 방식으로 사고 하는 것이 어느정도 익숙해지게 됩니다. 

 

 

이제 슬슬 템플릿(template)을 배워보도록 합니다.

템플릿은 일반화 프로그래밍(generic programming) 패러다임으로 데이터 처리하는 로직을 데이터 타입에 비종속적으로 구현할 수 있게 해줍니다. 

(컴파일 타임에 주어진 타입 별로 클래스들이 분화됩니다)

 

템플릿 문법을 직접 사용해보는 것도 좋지만 STL(Strandard Template Library)을 잘 다루는 것이 매우 중요하기 때문에 STL의 컨테이너(container)들을 활용하는 연습을 많이 하는 것이 좋습니다.  

 

vector, list, map 등의 주요 컨테이너들을 능숙하게 다룰 수 있게 되면 특별한 경우를 제외하면 대부분의 로직을 구현할 수 있습니다. 

 

 

 

여러분의 공감과 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 주시면 감사하겠습니다.

-Peter의 우아한 프로그래밍

 

 

 

반응형
저작자표시 비영리 동일조건
  • 카카오스토리
  • 트위터
  • 페이스북

'프로그래밍 > C++' 카테고리의 다른 글

[C++] 포인터(Pointer)와 레퍼런스(Reference : 참조자)의 차이  (16) 2016.11.20
[C++] map vs hash_map(unordered_map)  (5) 2015.08.20
    '프로그래밍/C++' 카테고리의 다른 글
    • [C++] 포인터(Pointer)와 레퍼런스(Reference : 참조자)의 차이
    • [C++] map vs hash_map(unordered_map)
    c vs c++, C++, C++ 공부법, C++ 특징, c++ 패러다임, C와 C++ 차이
    Peter Ahn
    Peter Ahn
    IT 정보 공유, 프로그래밍 지식 공유
    댓글쓰기
    [C++] 포인터(Pointer)와 레퍼런스(Reference : 참조자)의 차이
    이전 글
    [C++] 포인터(Pointer)와 레퍼런스(Reference : 참조자)의 차이

    티스토리툴바