-
[C++] namespace 의미와 class 간 차이C++/C++ 기초 2025. 11. 23. 15:13
namespace 란?
c++에서 namespace는 이름 충돌을 방지하기 위한 이름 공간이다. 프로그램이 커지는 경우, 함수 이름 또는 전역 변수 이름이 겹치는 문제가 발생할 수 있다. namespace로 감쌀 경우, 충돌을 피할 수 있다.
#include <iostream> using namespace std; namespace MySpace { int number = 10; void print() { cout << "MySpace::print() 호출!" << endl; } } int main() { cout << MySpace::number << endl; MySpace::print(); return 0; }위 코드에서 변수 number, 함수 print()는 namespace인 Myspace 내에 선언되어 있다. 그리고 Myspace내 함수와 변수를 쓰기 위해서 Myspace::를 붙여 접근할 수 있다. 예시 코드를 실행할 경우 아래와 같이 출력된다.
10 MySpace::print() 호출!같은 함수명이 선언될 경우, 일반적으로 충돌이 일어나지만, 서로 다른 namespce로 감쌀 경우, 충돌은 일어나지 않는다.
using namespace 예시
#include <iostream> using namespace std; namespace Space { int value = 100; } int main() { using namespace Space; cout << value << endl; // Space::value }using namespace를 사용할 경우, 접두어를 붙이지 않아도, 해당 namespace의 변수 및 함수에 접근할 수 있다.
class란 무엇인가?
C++에서 클래스란 객체를 설계하기 위한 구조다. 하나의 틀 역할을 한다.
#include <iostream> using namespace std; class Math { public: int add(int a, int b) { return a + b; } }; int main() { Math m; // 객체 생성 cout << m.add(3, 5) << endl; }위 코드에서 클래스 Math의 틀을 정의하고, Main문에서 Math 클래스들을 가지는 m 객체를 생성한다. 그리고 그 객체에서 함수를 호출한다.
namespace와 class 비교
namespace class 목적 이름충돌방지, 코드 그룹화 객체 설계 (속성 + 기능) 사용형태 인스턴스 (객체) 생성 불가 인스턴스 (객체) 생성 가능 메모리 사용 없음 (이름만 정의) 객체 생성시 사용 캡슐화 지원 안함 private, public 사용 주 사용처 라이브러리 객체지향 설계 즉 namespace는 이름을 관리하는 도구이며, class는 객체를 만드는 틀이라고 볼 수 있다. 둘 다 비슷하게 생겼지만, 역할과 목적은 완전히 다르다.
