ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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는 객체를 만드는 틀이라고 볼 수 있다. 둘 다 비슷하게 생겼지만, 역할과 목적은 완전히 다르다. 

     

Designed by Tistory.