250x250
Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

minjea.dev의 코딩블로그

[c#] 네임스페이스 그리고 using 본문

코딩강좌/c#

[c#] 네임스페이스 그리고 using

minjea.dev 2022. 4. 13. 12:00
728x90

namespace

네임스페이스란 이름이 중복되는 클래스 등을 구분하기 위해 나온 기능입니다. A가 dll을 만들어 배포하고, B도 dll을 만들어 배포했다고 가정해봅시다. 만약 A가 만든 dll에 CSharp이란 클래스가 있고, B가 만든 dll에도 CSharp이란 클래스가 있다고 하면, 이 두개의 dll을 동시에 이용하면 에러가 발생하게 됩니다. 따라서 이런 문제를 해결하기 위해 등장한 것이 네임스페이스입니다.

아래는 기존 코드입니다

class CSharp {} // A가 만든 클래스
class CSharp {} // B가 만든 클래스

이러면 에러가 발생합니다. 따라서, 이럴때 네임스페이스로 문제를 해결할수 있습니다. 네임스페이스를 이용하여 문제를 해결한 코드는 다음과 같습니다.

namespace Adll {
    class CSharp {}
}

namespace Bdll {
    class CSharp {}
}

위 코드를 보면 "namespace 네임스페이스명"으로 선언 후 그 안에 클래스나 코드를 선언하는 방식입니다. 네임스페이스 내부에서는 다음과 같이 클래스를 여러개 선언할수 있습니다. 심지어는 네임스페이스 안에 네임스페이스를 선언하는것도 가능합니다.

namespace 네임스페이스명 {
    class 클래스1 {}
    class 클래스2 {}
    namespace 네임스페이스1 {}
    ... code
}

또한 네임스페이스 안에 있는 클래스를 네임스페이스 외부에서 네임스페이스 이름까지 다 명시해야 합니다. 즉, 네임스페이스명.클래스명 으로 가져올수 있습니다

그런데 아까 네임스페이스는 동일한 이름의 클래스 등의 충돌을 방지하기 위해 사용한다고 했습니다. 하지만 현실에서는 클래스의 소속을 구분하는 등의 용도로 더 많이 사용됩니다.

 

using문

아래 예제를 봐 주세요. 아래 코드에서는 CSharp 네임스페이스 안에 있는 Test 클래스의 인스턴스를 생성하는 예제입니다. 그런데 문제가 있습니다. 지금은 괜찮지만, 나중에 프로젝트가 커지면서 많은 네임스페이스가 추가된다면, 소스 코드가 조금 길어진다는 문제가 생깁니다.

CSharp.Test st = new CSharp.Test();

namespace CSharp {
    class Test {}
}

그래서 c#에서는 using 이라는 키워드가 지원됩니다. 이 키워드를 이용하면 특정 네임스페이스의 이름 없이 객체를 가져올수 있습니다. 다음 예제처럼 코드를 바꿔 보세요

using CSharp;
Test st = new Test();

namespace CSharp {
    class Test {}
}

그렇다면 CSharp이라는 접두사가 없이도, Test 클래스의 인스턴스를 잘 생성할수 있습니다. using 네임스페이스명; 을 코드 최상위에 넣어주시면, 그 네임스페이스명에 있는 클래스 등을 사용하겠다고 c#에게 알려주게 됩니다. 그래서 위 코드에서 CSharp 접두사가 없이도, Test 클래스의 인스턴스를 생성할수 있었던 겁니다.

 

오늘은 이렇게 네임스페이스와 using에 대하여 알아보았습니다.

728x90