C언어와 C++언어의 큰 차이점이라고 한다면,
C언어는 절차 지향 프로그래밍 언어이고 C++는 객체 지향 프로그래밍 언어입니다.
객체 지향 프로그래밍 언어의 특징은 다음과 같습니다.
- 캡슐화 (Encapsulation)
- 상속성 (Inheritance)
- 다형성 (Polymorphism)
1번의 경우 class로 이를 구현하며, class의 기능을 물려받아 또 다른 class를 정의한다는 것이 2번의 개념입니다.
function overloading이나 overriding에 관련된 것들은 3번이며, 이 역시 class와 관련된 것들이 있습니다.
이번 글과 다음 글에서는 C++만이 가지고 있는 기본적인 사항들을 다룰 것입니다.
1. 표준 입출력
C++에서는 다음 함수를 통해 표준 입출력을 처리합니다.
cin : 입력, cout : 출력
cin, cout을 사용할 경우 C언어에서 써 오던 형식문자(%d)를 사용할 필요가 없습니다.
따라서 변수의 자료형에 상관 없이 코드를 더 직관적으로 작성할 수 있습니다.
cout 줄바꿈 시 ‘\n’ 대신 endl로도 작성 가능합니다. 다만 속도는 ‘\n’이 조금 더 빠릅니다.
하지만 cin, cout을 사용하더라도 문자열 입력에는 한계가 존재합니다.
cin으로 문자열 입력 시 공백을 처리할 수 없습니다.
이를 위해 다음과 같은 함수를 사용합니다.
cin.getline(문자열 변수, 크기, 기준 문자(기본값 : ‘\n’, 생략 가능))
해당 함수는 기준 문자가 입력될 때 까지 입력을 받으며, 기본값은 ‘\n’ (엔터) 입니다.’
cin.getline(s, 20)은 변수 s에 최대 20의 크기로 공백을 포함한 문자를 받을 수 있습니다.
2. Namespace
다양한 라이브러리를 사용할 경우, 해당 라이브러리에 중복되는 이름이 있을 수 있습니다.
이를 해결하기 위해 namespace라는 개념이 도입되었고, 2개 이상의 라이브러리에서 함수나 class의 이름이 중복되더라도 겹치지 않도록 사용할 수 있습니다.

[그림 1]의 경우 func()를 실행할 때, 해당 함수가 LibA의 함수인지 LibB의 함수인지 모호하여 에러를 반환합니다.
이것을 namespace를 이용하여 해결해 보겠습니다.

A::func()를 실행시키면, A에 해당하는 namespace의 func()를 호출하게 됩니다.
즉, 네임스페이스 이름::호출 요소 이름 코드를 통해 해당 namespace의 요소를 가져올 수 있게 됩니다.
1번에서 cin, cout 함수를 사용했었는데, 이는 std namespace(standard namespace)에 정의된 함수입니다.
따라서 원래 아래와 같이 코드를 작성해야 합니다.
이렇게 해야 하는 이유는, 위에서 언급했듯 cin과 cout이 std namespace(standard namespace) 안에 작성되어 있기 때문입니다.
하지만 이렇게 코드를 작성하게 되면 작성이 불편해지고, 가독성도 떨어집니다.
이렇게 using std::cin을 작성할 경우, “cin 함수는 무조건 std namespace 안에서 꺼내 쓰겠다”와 같은 의미가 됩니다.
따라서 cin에 대해서는 앞에 std::를 작성할 필요가 없습니다.
하지만 cout 등 다른 std 요소들은 여전히 std::를 붙여야 합니다.
std 안에 정의된 요소들을 std:: 없이 사용하기 위해서는 위와 같이 using namespace std를 작성하면 됩니다.
이는 “cin, cout 등 std 안에 정의된 요소들은 무조건 std에서 꺼내 쓰겠다”와 같은 의미가 되며, 보통 include <iostream>과 같이 사용하게 됩니다.
3. Function Overloading
객체지향 요소 중 다형성의 특징에 속하는 함수 오버로딩(함수 중복)입니다.
이는 같은 이름의 함수를 여러 개 사용할 수 있도록 하며,
이것이 가능한 이유는 C++에서 함수를 구별할 때 함수 이름과 매개 변수를 활용하기 때문입니다.
위 두 개의 swap 함수는 C++에서 서로 다른 함수로 인식됩니다.
함수 이름은 같지만, 매개 변수가 다르기 때문입니다.
swap()을 호출할 때 int *을 매개변수로 보내면 위의 swap이 호출될 것이고,
double *을 매개변수로 보내면 아래의 swap이 호출될 것입니다.
return type만 다르다면 서로 다른 함수로 인식하지 않습니다.
즉, 위 2개의 함수는 오버로딩이 불가능합니다.
4. 함수의 기본 매개변수
C++에서는 매개변수 생략 시 default로 지정되는 매개 변수의 값을 작성할 수 있습니다.
위와 같은 함수를 정의하고 호출할 때, power(2)를 호출하게 되면 2번째 매개변수는 자동으로 default 값인 2가 됩니다.
해당 특징을 이용할 때 고려되어야 할 몇 가지 사항들이 있습니다.
- default 매개 변수 지정은 뒤에서부터 가능
- int power(int x = 2, int y) 와 같은 형식으로 작성할 수 없습니다.
- 모호한 호출 상황의 발생 가능성
- int power(int x), int power(int x, int y = 2) 함수가 정의되어 있고
- power(2)를 호출할 경우 어떤 함수가 호출되어야 하는지 모호한 상황이 발생합니다.
5. new와 delete
C에서는 malloc()과 free() 함수로 동적 메모리를 할당하고 해제할 수 있습니다.
C++에서는 new와 delete를 이용하여 이를 구현할 수 있습니다.
6. bool 자료형
C++에서는 bool 자료형이 추가되어 true, false 값을 사용할 수 있습니다.
'Programming Language > C++' 카테고리의 다른 글
[C++] 클래스와 객체 (0) | 2025.04.30 |
---|---|
[C++] C++의 기본 (2) (0) | 2025.04.30 |
[C++] C언어 살펴보기 (0) | 2025.04.30 |
댓글