일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이지스퍼블리싱
- c
- c#
- 리뷰
- 포인터
- 함수
- Programming
- Javascript
- CS
- c++
- 지식나눔강좌
- 티스토리
- Windows
- doit코틀린프로그래밍
- 프로그래밍
- 문법
- 배열
- Win32
- Kotlin
- Direct2D
- tipssoft
- Tips강좌
- Visual Studio
- 연산자
- Desktop
- Tips프로그래밍강좌
- 백준
- 알고리즘
- 김성엽
- VS ERROR
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
C# - namespace(네임스페이스) 본문
지역을 정해주는 개념으로, 혹은 이름 중복을 해결하기 위한 수단으로 보면 될 것 같다
이름 중복
프로그램 규모가 커지면 커질수록 소스코드에서 변수를 사용하는 규모도 함께 커진다. 단순히 변수의 규모만 커지는 것도 아니고 함수, 클래스 등 온갖 내용이 함께 나오니 점점 프로그램에서 사용할 수 있는 이름도 줄어들게 된다.[# 이미 사용된 이름은 사용할 수가 없으니까] 이 문제를 해결하기 위해선 각각의 이름을 구분지을 수 있는 방법이 있어야 한다.
여러 식당에서 같은 메뉴를 판매 하더라도 식당 이름이 다르면 사람들이 구분을 지을 수 있듯이, C#에서도 구분을 짓는데 도움이 되는 문법이 있다. 이름하여 namespace(네임스페이스)다.
네임스페이스
네임스페이스는 당장에 콘솔 프로그램을 작성할 때도 나오는데, 처음 프로젝트를 생성하면 프로젝트 이름을 기반으로 한 네임스페이스 안에 코드가 구성된다.
나중에 배우겠지만 클래스는 네임스페이스 바깥에서도 정의가 가능하다. 그러나 대부분의 경우에선 네임스페이스 안에 정의를 한다.
필요성
네임스페이스는 필수 불가결한 존재다. 만일 다른 개발자가 만든 라이브러리를 사용하려고 하는데 내 코드와 이름이 겹치는 변수, 혹은 함수가 존재해서 충돌이 일어난다면 그것은 그것대로 난감한 일이 될 것이다. 이 문제는 네임스페이스로 대상을 묶음으로서 해결할 수 있다.
namespace A{
class test{
}
}
namespace B{
class test{
}
}
해당 코드는 class test가 중복 선언되어 있지만 서로 다른 네임스페이스 영역에 존재하기 때문에 충돌없이 사용이 가능하다. 각각의 클래스가 서로 다른 기능을 수행하더라도 이는 네임스페이스를 기반으로 구분을 할 수 있기 때문에 문제가 되지 않는다.
작성
네임스페이스는 계층으로 만들 수 있다. 즉, 아래처럼 만들 수 있다는 소리가 된다.
namespace A{
namespace B{
class Test{
}
}
}
Test에 접근하기 위해선 A.B.Test가 되는 것이다. 물론, 이렇게 계층을 하나하나 만들 필요는 없고, 컴마(.)를 통해 한 번에 만들 수도 있다.
namespace A.B{
class Test{
}
}
사용
네임스페이스는 범위를 한정짓는데 큰 도움이 되지만 이름의 길이가 길어지면 코드 작성에 불편을 겪을 수도 있다. 당장에 콘솔창에 텍스트 출력을 하는 함수도 사용을 하려면 아래처럼 작성해야한다.
System.Console.Write();
System.Console.WriteLine();
이런 불편을 줄이기 위해 using이란 키워드를 사용할 수 있다.
using System.Console;
코드 상단에 위와 같이 작성을 하게 되면, 기본적으로 네임스페이스가 System.Console인 내부 함수들을 작성할 때 해당 네임스페이스를 작성하지 않고도 사용할 수 있다.
Write();
WriteLine();
주의할 점
using을 사용해 제거할 수 있도록 구성한 경우 주의할 점이 있다.
using A;
using B;
namespace A{
class Test{
}
}
namespace B{
class Test{
}
}
이와 같은 코드에서 Test라고만 작성을 하게 되면 A.Test가 호출이 될까 B.Test가 호출이 될까? 정답은 syntax 에러를 일으킨다. 컴파일 할 때 Test를 호출하면 A.Test를 호출해야할지 B.Test를 호출해야할지 모호하기 때문이다. 때문에 이런 경우엔 A.Test나 B.Test라고 명시적으로 호출을 해주면 문제가 해결된다. 다른 많은 부분들이 겹치지 않는데 단 하나의 대상이 겹쳐서 using을 사용하지 않고 계속 네임스페이스를 작성하면 불편이 이만저만이 아닐테니 말이다. using을 사용했다고 무조건 네임스페이스를 제거하고 작성해야하는 것은 아니라는 것을 명심하자.
# index
'DEV > .Net' 카테고리의 다른 글
C# - 메서드에 대해서 (0) | 2021.05.29 |
---|---|
C# - 구조체와 클래스 (0) | 2021.05.28 |
C# - 예외 처리 (0) | 2021.05.27 |
C# - 반복문 (0) | 2021.05.27 |
C# - 조건문 (0) | 2021.05.27 |