또레
C와 C++의 차이 본문
C와 C++의 차이
C와 C++의 가장 큰 차이는 절차지향(Procedural)와 객체지향(Object-Oriented)에 있다.
패러다임(절차 지향 vs 객체 지향)
C는 절차 지향 프로그래밍 언어이다. C에서는 데이터와 관련된 함수를 따로 정의하고, 이들을 호출하여 사용한다.
C++은 C에 객체 지향 프로그래밍의 개념을 도입한 언어이다. C++은 클래스와 객체를 사용하여 데이터와 해당 데이터를 다루는 함수를 하나의 단위로 묶어 사용한다.
* 클래스와 객체의 차이는?
클래스는 설계도, 객체는 클래스라는 설계도로 만들어진 물품으로 예시를 들 수 있다.
정확한 정의는 아래와 같다.
Class : 사용자 정의 데이터 형식으로, 멤버 변수(속성)와 멤버 함수(동작)을 포함할 수 있다.
Object : 클래스의 인스턴스(메모리 상의 존재). 클래스를 기반으로 생성되며, 클래스에서 정의한 속성과 동작을 가진다.
클래스와 객체
C에서는 클래스와 객체라는 개념이 없다. 데이터와 함수는 따로 정의되며, 프로그램은 함수 호출을 통해 제어된다.
C++에서는 클래스와 객체를 사용하여 데이터와 함수를 하나로 묶어 프로그래밍한다.
함수 오버로딩
C에서는 함수 오버로딩을 지원하지 않는다.
C++에서는 함수 오버로딩을 지원한다. 컴파일러는 전달된 매개변수 형식에 따라 바인딩된 함수를 호출한다.
연산자 오버로딩(operator)
C에서는 연산자 오버로딩을 지원하지 않는다.
C++에서는 연산자 오버로딩을 지원한다. 사용자가 새로운 데이터 형식에 대해 연산자의 동작을 정의 가능하다.
표준 템플릿 라이브러리(STL)
C에는 STL과 같은 표준 라이브러리가 없다.
C++에는 STL이 있다. 이는 템플릿을 사용해, 제네릭 프로그래밍을 할 수 있는 자료구조와 알고리즘을 제공한다.
메모리 관리
C에서는 메모리 할당 및 해제를 위해 malloc과 free와 같은 함수를 사용한다.
C++에서는 new 및 delete 연산자를 사용하여 동적으로 메모리를 할당하고 해제한다. 또한 스마트 포인터와 RAII등의 개념으로 자동으로 메모리가 관리된다.
* "malloc()과 new의 차이" 혹은 "free()와 delete의 차이"
malloc/free는 함수이고, new/delete는 연산자이다.
포인터 사용에서의 C와 C++의 차이
malloc() / free() <=> new / delete
C에서는 malloc()과 free() 함수를 사용해 메모리를 동적으로 할당하고 해제한다.
C++에서는 new와 free 연산자를 사용해 메모리를 동적으로 할당하고 해제한다.
포인터와 문자열
C에서는 문자열을 배열로 다루거나, 문자열 함수를 사용한다.
C++에서는 std::string을 사용해 문자열을 사용한다.
const 포인터
C에서는 const 포인터가 있지만, const 포인터의 내용을 변경하는 것은 허용되지 않는다.
C++에서는 const 포인터 뿐만 아니라, const가 가리키는 내용까지 변경할 수 없도록 하는 const를 사용한 포인터 형식이 있다.
* 예시
// 정수형 상수를 가리키는 포인터
const int* myInt1 = &var;
// 정수형 상수를 가리키는 포인터
int const* myInt2 = &var;
// const가 중복되어 사용되어 문법 오류
const int const* myInt3 = &var;
// 정수형을 가리키는 상수 포인터
int* const myInt4 = &var;
참조자(reference; &)
C에는 참조자가 없다.
C++에는 참조자를 사용하여 변수에 대한 별칭을 만들 수 있다.
'개발 > C, C++' 카테고리의 다른 글
스마트 포인터 (0) | 2023.11.30 |
---|---|
함수 오버로딩과 오버라이딩 (1) | 2023.11.30 |