minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (3)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • mfc
  • 그램업그레이드
  • 인공지능개발자
  • 19년식그램SSD장착
  • 이차원구조체배열포인터
  • API문서정리
  • OpenGL회전
  • SpringBootSwagger
  • 이것이C++이다책참고
  • 리눅스파티션
  • 구조체매개변수
  • 그램풀스팩업그레이드
  • AI배워야하나
  • 티스토리폰트배경색없애기
  • kafka구축
  • GSLB
  • hello테마
  • 구조체배열포인터
  • NextJSSwagger
  • 19년식그램램장착

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️C++

[C++] 네임스페이스, using, 네임스페이스 중첩, 네임스페이스 다중정의

2023. 9. 6. 18:00

네임스페이스namespace란?

C++이 지원하는 각종 요소들(변수, 함수, 클래스 등)을 한 범주로 묶어주기 위한 문법

 

네임스페이스 형식

네임스페이스 블록 내부에 선언하는 변수나 함수들은 모두 명시한 namespace의 이름에 속하게된다.

namespace 이름
{
   //네임스페이스 시작
   변수
   함수
...
  //네임스페이스 끝
}

 

네임스페이스 선언 예제

아래 예제는 person 네임스페이스에 변수 age, name과 함수 printInfo가 속하게 되는 것이다.

namespace person{
    int age = 20;
    std::string name = "domin";
    void printInfo(){
    	std::cout << age << "," << name << std::endl
    }
}

 

네임스페이스에 소속되어있는 식별자 사용

사용하고 싶은 네임스페이스의 식별자 앞에 범위지정 연산자(::)를 이용해 네임스페이스를 기술한다. (person::식별자)

int _tmain(int argc, _TCHAR * argv[]){
    person::printInfo();     //person 네임스페이스의 printInfo()함수를 호출한다는 의미
    std::cout << person::age <<std::endl;  //cout, endl도 std 네임스페이스의 식별자라는 것을 알 수 있다.
}

 

 

_tmain 함수는 소속되어있는 네임스페이스가 없나?

_tmain() 함수는 전역 네임스페이스에 속한다. 전역에는 네임스페이스를 지정하지 않는다. 

 

 

네임스페이스 사용하면 좋은 점

  • 코드의 소속을 나누면 규모가 큰 프로그램을 만들기 좋다.
  • 코드에서 식별자에 붙이는 이름이 모든 코드에서 중복될 확률이 많은데 이런 경우 네임스페이스를 잘 활용한다면 이름이 겹치는 문제를 해결할 수 있다.

using 선언

  • 네임스페이스에 속해있는 식별자들을 사용하기 위해 "네임스페이스명::" 을 항상 써줘야하는 번거로움을 없애준다.
  • using 선언으로 네임스페이스를 생략해서 식별자를 사용하자.

 

using 사용법

using namespace 네임스페이스이름;

 

using 사용예제

using namespace std;
using namespace person;

//main
cout << "hello" << endl;
cout << printInfo() << endl;

 

네임스페이스에서 특정 식별자만 using 사용

using std::endl;
using std::cout;

//main
cout << "hello" << endl;

 


네임스페이스 중첩

네임스페이스 안에 또 다른 네임스페이스가 속할 수 있다.

  • 식별자 앞에 별도로 범위 지정 연산자를 붙이지 않는다면 정해진 순서에 따라 식별자를 검색한다. (식별자 검색 순서는 정해져있다.)
using namespace std;

namespace TEST
{
    int nData = 100;
    namespace DEV
    {
        int nData = 200;
        namespace WIN
        {
            int nData = 300;
        }
    }
}

//main
cout << TEST::nData << endl;
cout << TEST::DEV::nData << endl;
cout << TEST::DEV::WIN::nData << endl;

 


네임스페이스와 다중 정의

  • 각각 다른 네임스페이스에 동일한 함수를 정의할 수 있다.
  • 그러나 동일한 함수를 정의한 네임스페이스를 동시에 using 연산자를 사용할 수 는 없다. 같은 함수가 선언된 각각의 네임스페이스에 using 연산을 하고 네임스페이스 지정없이 함수를 호출하면 어떤 네임스페이스를 호출했는지 알수 없기 때문에 모호성이 발생한다. 이때는 오류가 발생한다. 따라서 네임스페이스를 지정해서 함수를 사용하여야한다.

 

void TestFunc(void){print('a')}

namespace TEST{
    void TestFunc(){print('b')}
}

namespace MYDATA{
    void TestFunc(){print('c')}
}

//using namespace TEST;    //선언불가 (다른 네임스페이스와 중복되는 식별자 다중정의 때문)
//using namespace MYDATA;  //선언불가(다른 네임스페이스와 중복되는 식별자 다중정의 때문)


int main(){
    TestFunc();       //=>a    //묵시적 전역
    ::TestFunc();     //=>a    //명시적 전역
    TEST::TestFunc(); //=>b
    MYDATA::TestFunc(); //=>c
}

 

더보기
 

Visual Studio C++ 사전

c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1. C에서 C++로 문법 전환하기 Chap1. C와는 다른 C++ [C++] Hello world 출력해보기 [C++] 여러 변수 출력하기 [C++] Visual Studio 에서 추가로 사용

genius-duck-coding-story.tistory.com

'◼️C++' 카테고리의 다른 글

[C++] 객체지향 프로그래밍 개요  (0) 2023.09.17
[C++] 식별자 검색 순서  (0) 2023.09.07
[C++] 인라인 함수  (0) 2023.09.05
[C++] 함수다중정의(오버로딩), 템플릿 함수  (0) 2023.09.05
[C++] 디폴트 매개변수  (0) 2023.09.05

    티스토리툴바