티스토리 뷰

C#

namespace와 using 키워드

inasie 2009. 6. 26. 03:02

What is Namespace

Namespace는 그대로 해석해버리면 이름공간?정도가 되겠다.

우잉? 뭔소리야

Namespace { }로 묶인 것들은 하나의 작업 단위라고 보면 되겠다.

예를 들어 System Namespace에는 우리가 자주 사용하는 Console이나 Object, String과 같은 클래스들이 정의되어 있다.

다른 Namespace 공간에 있는 클래스나 구조체, 상수들을 접근하기 위해서는 네임스페이스.클래스와 같은 ‘.’(dot)을 이용해 접근한다. 하지만 매번 이렇게 Namespace이름.클래스 와 같이 접근하자면, 코드의 양은 엄청나게 길어질 것이다. 예를 들어 자료구조에서 많이 사용되는 Stack과 같은 클래스는

namespace System

{

namespace Collections

{

class Stack( … 이하 구현 생략

}

} 

와 같이 정의되어 있다. 이를 일일이 ‘.’을 통해 접근하게 되면 다음과 같은 코드가 나올것이다.

System.Collections.Stack stack = new System.Collections.Stack();

 

불편하다

 

그래서 using이란 키워드가 나온다.

using 네임스페이스이름; 과 같이 써주면 해당 파일 내에서는 네임스페이스이름 하위에 있는 클래스, 구조체, 상수 등을 접근할 때 네임스페이스.’을 생략할 수 있다.

 

그럼 프로젝트를 생성하면 맨 처음 나오는 코드를 보자.

 

using System;….

namespace 프로젝트 이름

{

    class Program

    {

        static void Main(string[] args)

        {

        }

    }

}

 

이놈이다. 위에 using System; 이 보이는가. 이말은 곧 System 네임스페이스 하위에 있는 모든 클래스와 같은 것들을 접근할 때 System.클래스 에서 System.을 생략하고 쓸 수 있다는 말이 된다. 때문에 우리는 자연스럽게 Console.WriteLine()과 같이 사용할 수 있는것이다.

(using System;이 없었다면, System.Console.WriteLine()과 같이 사용해야한다.)

 

using에 또 한가지 기능이 있다면 네임스페이스 이름을 임시적으로 변경할 수 있는 기능이다.

이건 또 뭔소린가

앞서 보았듯이 Stack 클래스는 System.Collections; 네임스페이스 안에 정의되어 있다.

근데 System.Collections대신에 ‘Test’라는 네임스페이스로 임시 지정하여 마치 Stack이라는 클래스가 Test라는 네임스페이스 밑에 있다는 듯이 사용하고 싶을 일이 있을 수 있다.

(Test.Stack stack = new Test.Stack() 처럼 쓰고싶단 말이다.)

그럴 경우에 임시적으로 System.Collections 라는 네임스페이스를 Test라는 네임스페이스로 변경할 수 있다. (컴파일러를 속이는? 것이다.)

 

using Test = System.Collections;

 

직관적이다. 간단하다.

 

반응형
댓글