{{위키데이터 속성 추적}}
{{위키}}
'''이름공간''' 또는 '''네임스페이스'''({{llang|en|namespace}})는 개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름 공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다.

저명한 예는 다음을 포함한다:
* [[파일 시스템]]은 파일에 이름을 할당하는 이름공간이다.<ref>{{콘퍼런스 인용
 |first1=Atul
 |last1=Adya
 |first2=William
 |last2=Bolosky
 |first3=Miguel
 |last3=Castro
 |first4=Gerald
 |last4=Cermak
 |first5=Ronnie
 |last5=Chaiken
 |first6=John
 |last6=Douceur
 |first7=Jon
 |last7=Howell
 |first8=Jacob
 |last8=Lorch
 |first9=Marvin
 |last9=Theimer
 |first10=Roger
 |last10=Wattenhofer
 |title=FARSITE: Federated, Available, and Reliable Storage for an Incompletely Trusted Environment
 |conference=Proc. [[USENIX]] Symp. on Operating Systems Design and Implementation
 |year=2002
 |url=http://paul.rutgers.edu/cs545/S06/papers/adya-farsite-osdi-2002.pdf
 |quote=The primary construct established by a file system is a hierarchical directory namespace, which is the logical repository for files.
 |url-status=dead
 |archiveurl=https://web.archive.org/web/20100728202945/http://paul.rutgers.edu/cs545/S06/papers/adya-farsite-osdi-2002.pdf
 |archivedate=2010-07-28
 |df= 
}}</ref>
* 일부 [[프로그래밍 언어]]들은 이름공간 안에 [[변수 (컴퓨터 과학)|변수]]와 [[함수]]를 조직한다.<ref>{{웹 인용|url=http://en.csharp-online.net/CSharp_FAQ:_What_is_a_namespace |title=C# FAQ: What is a namespace |publisher=C# Online Net |location=http://en.csharp-online.net/ |quote=A namespace is nothing but a group of assemblies, classes, or types. A namespace acts as a container—like a disk folder—for classes organized into groups usually based on functionality. C# namespace syntax allows namespaces to be nested. |accessdate=2010-02-23 |archiveurl=https://web.archive.org/web/20131020150529/http://tutorials.csharp-online.net/index.php?title=CSharp_FAQ%3A_What_is_a_namespace |archivedate=2013-10-20 |url-status=dead |df= }}</ref><ref>{{웹 인용|url=http://php.net/manual/en/language.namespaces.rationale.php|title=An overview of namespaces in PHP|last=|first=|date=|website=PHP Manual|publisher=|access-date=|quote=What are namespaces? In the broadest definition namespaces are a way of encapsulating items. This can be seen as an abstract concept in many places. For example, in any operating system directories serve to group related files, and act as a namespace for the files within them.}}</ref><ref>{{웹 인용|url=https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html|title=Creating and Using Packages|last=|first=|date=|website=Java Documentation|publisher=Oracle|access-date=|quote=A package is a grouping of related types providing access protection and name space management. Note that types refers to classes, interfaces, enumerations, and annotation types. Enumerations and annotation types are special kinds of classes and interfaces, respectively, so types are often referred to in this lesson simply as classes and interfaces.}}</ref> 컴퓨터 프로그래밍 언어인 C에서는 전역 지역 공간과 지역 이름 공간이라는 이름 공간에 대한 개념이 있는데, 각각의 이름 공간에서는 같은 변수나 함수 이름을 사용할 수 없지만, 영역이 다르면 변수나 함수명이 같을 수도 있다. C++와 Java 프로그래밍 언어에서는 이름 공간을 명시적으로 지정하여 사용할 수 있다.
* [[컴퓨터 네트워크]]와 [[분산 시스템]]은 이름을 컴퓨터, 프린터, 웹사이트, (원격) 파일 등의 자원에 할당한다.

== 네이밍 시스템 ==
이름공간의 이름은 이름공간 식별자와 로컬 이름으로 구성된다. 이름공간의 이름은 일반적으로 로컬 이름에 대한 두문자로 적용된다.

[[ABNF]] 형식으로는 다음과 같이 나타낸다.

 name = <namespace identifier> separator <local name>

=== 예 ===

{| class=wikitable
|+ 이름공간의 이름의 예
|-
! 컨텍스트 !! 이름 !! 이름공간 식별자 !! 로컬 이름
|-
| [[경로]] || /home/user/readme.txt || /home/user (path) || readme.txt (file name)
|-
| [[도메인 네임]] || www.example.com || example.com (domain) || www (host name)
|-
| C++ || std::array || std || array
|-
| [[UN/LOCODE]] || US NYC || US (country) || NYC (locality)
|-
| [[XML 이름공간|XML]] || xmlns:xhtml="http://www.w3.org/1999/xhtml" <br> &lt;xhtml:body&gt; || http://www.w3.org/1999/xhtml || body
|- 
| [[펄 모듈|펄]] || $DBI::errstr || DBI || $errstr
|-
| [[자바 패키지|자바]] || java.util.Date || java.util || Date
|-
| [[URN]] (URN) || urn:nbn:fi-fe19991055 || urn:nbn (National Bibliography Numbers) || fi-fe19991055
|-
| [[핸들 시스템]] || 10.1000/182  || 10 (Handle naming authority) || 1000/182 (Handle local name)
|-
| [[디지털 객체 식별자]] || 10.1000/182 || 10.1000 (publisher) || 182 (publication)
|-
| [[MAC 주소]] || 01-23-45-67-89-ab  || 01-23-45 ([[:en:organizationally unique identifier]]) || 67-89-ab (NIC specific)
|-
| [[PCI ID]] || 1234 abcd || 1234 (Vendor ID) || abcd (Device ID)
|-
| [[USB Implementers Forum|USB VID/PID]] || 2341 003f<ref>
Stephen J. Gowdy.
[http://www.linux-usb.org/usb.ids "List of USB ID's"].
2013.
</ref> || 2341 (Vendor ID) || 003f (Product ID)
|}

== 프로그래밍에서의 예 ==
아래는 C++에 사용한 이름공간의 예이다.
<syntaxhighlight lang="cpp" line="1">
#include <iostream>
using std::cout;
using std::endl;

namespace Box1{
   int boxSide = 4;
}

namespace Box2{
   int boxSide = 12;
}

int main () {
  cout << Box1::boxSide << endl;  //output 4
  cout << Box2::boxSide << endl;  //output 12
  return 0;
}
</syntaxhighlight>

== 같이 보기 ==
* [[디지털 객체 식별자]] (DOI)
* [[IP 주소]]
* [[학명]]
* [[듀이 십진분류법]]
* [[도메인 네임 시스템]]
* [[미국의회도서관 분류법]]
* [[성표]]

== 각주 ==
{{각주}}

{{프로그래밍 구성체}}
{{토막글|컴퓨터 과학}}

[[분류:프로그래밍 구성체]]