갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • c# collection
  • 강남 방탈출
  • 모바일 게임 순위
  • Unity Graph
  • 전세계게임매출순위
  • pc 게임 순위
  • 유니티 골드그래프
  • 유니티 그래프
  • 게임매출순위
  • 전세계 게임 매출
  • C++ 상속
  • C++
  • c# delegate
  • 글로벌게임매출
  • 자바
  • C++ virtual
  • 2020년 게임 매출
  • 롤 골드그래프
  • 게임 디자인 패턴
  • c# coroutine
  • C# 예외 처리
  • 알고리즘
  • pc게임 순위
  • c# 코루틴
  • c# unboxing
  • 유니티 그래프 그리기
  • c# Thread
  • C++ 소멸자
  • C# boxing
  • 게임 매출 순위

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥
프로그래밍/C++

[C++] namespace 개념

[C++] namespace 개념
프로그래밍/C++

[C++] namespace 개념

2019. 10. 3. 17:06
728x90
반응형

1. namespace의 필요성

 - 프로그램을 개발하다 보면 수백개의 파일로 구성될 수 있고 동시에 여러명의 개발자가 같이 작업할 수 있다.

 - 그 과정에서 함수나 구조체에 대한 이름충돌이 발생할 수 있다.

 

다음과 같은 스크립트가 있다고 하면 main에서 호출한 move함수는 무엇을 호출하는지 몰라 에러가 나온다.

해결방법으로 함수의 이름을 모두 다르게 하는 것도 방법이겠지만 그렇게 바꾸다 보면 헷갈리는 경우도 생긴다.

 

이럴 경우 namespace를 사용하여

위와 같은 형태로 바꿀 수 있다.

namespace로 묶여있지 않은 move함수는 global namespace라고 부른다.

 

namespace로 묶여있는 함수는 위와 같이 호출 할 수 있다.

namespace로 묶여있지 않는 move는 평소와 같이 호출하면 된다.

 


2. namespace의 장점

 - 다양한 요소(함수, 구조체 등)를 연관된 요소끼리 묶어 놓을 수 있다.

 - 기능별로 다른 공간을 쓰므로 이름 충돌을 막을 수 있다.

 


3. namespace의 요소에 접근하는 방법

3-1. 한정된 이름(qualified name)을 사용한 접근

 - Enemy::move()

 

3-2. using 선언(declaration)을 사용한 접근

 - using Enemy::move();

 - using이 선언된 내부에선 move함수는 Enemy 이름 없이 사용

 - Enemy함수 안에 move외에 attack이란 함수가 있다면 attack은 사용불가(using을 이용하여 move만 선언했기 때문에)

 

3-3. using 지시어(directive)를 사용한 접근

 - using namespace Enemy;

 - Enemy namespace내의 모든 함수를 Enemy이름 없이 사용

 

* using 선언 및 지시어는 함수 내부나 외부에서 선언 가능하지만 global namespace와 이름이 겹치는 함수가 있다면 이름충돌이 발생할 수 있다.

* global namespace에 접근하려면 함수 앞에 ::(콜론 두개)를 적어주면 된다. -> ex. ::move();

 


4. std namespace

 - C++ 표준의 모든 요소는 std 이름 공간 안에 있다.

 - using 지시어를 사용하게 되면 이름충돌이 발생할 수 있다.

 - ex) count라는 변수를 자주 사용하는데 std 이름 안에 count라는 함수가 있다. 이럴경우 ::count로 쓰면 되긴한다.

 


5. C++ header files

 - C++의 표준 헤더 파일은 확장자를 사용하지 않는다. ( .h )

 - C언어에서 사용하던 헤더파일을 사용해도는 되지만 가능하면 새로운 헤더파일을 사용하자

 - <stdio.h> 와 <cstdio>의 차이는 std namespace를 붙여서 사용할 수 있느냐는 차이점

728x90
반응형

'프로그래밍 > C++' 카테고리의 다른 글

[C++] 변수(2)  (0) 2019.10.05
[C++] 변수(1)  (0) 2019.10.05
[C++] iomanipulator  (0) 2019.10.05
[C++] C++ 표준 입출력  (2) 2019.10.04
[C++] CL 컴파일러 사용하기  (0) 2019.10.03
  • 1. namespace의 필요성
  • 2. namespace의 장점
  • 3. namespace의 요소에 접근하는 방법
  • 4. std namespace
  • 5. C++ header files
'프로그래밍/C++' 카테고리의 다른 글
  • [C++] 변수(1)
  • [C++] iomanipulator
  • [C++] C++ 표준 입출력
  • [C++] CL 컴파일러 사용하기
갓똥
갓똥
공부하며 알아가는 내용을 정리해 봅니다.

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.