[ C#.NET 기초강좌 #1] |
06. 네임스페이스(namespace) |
작성자 : NGong | 작성일 : 2011-04-15 오후 4:20:18 |
E-mail : filmgdh골뱅이gmail.com | Homepage : http://blog.daum.net/coolprogramming |
개인이나 회사에서 만들어 놓은 형식의 이름 중복을 피하기 위한 논리적인 이름 공간 정도로 생각하면 되겠습니다.
- A라는 회사에서 형식 Point를 만들어 놓았습니다 .
- B라는 회사에서도 형식 Point를 만들어 놓았습니다.
- 나는 A회사의 Point도 필요하고 B회사의 Point도 필요합니다. 어떻게 해야 할까요?
- 결론은 namespace 개념이 없으면 모두를 사용할 수는 없습니다. namespace가 있다면 모두 사용할 수 있습니다.
그래서 개인이나 회사는 자신만의 유니크한 네임스페이스를 만들어 형식을 정의해야 합니다.
네임스페이스는
namespace 이름 { 형식 정의 } 와 같이 사용합니다.
다음 예제는 Point 클래스를 두 네임 스페이스 공간(A, B)에 각각 정의했습니다.
-
namespace A
{
class Point
{
private int x, y;
public Point(int _x, int _y)
{
x = _x;
y = _y;
}
public void Print()
{
System.Console.WriteLine("A:({0},{1})", x, y);
}
public static void StaticMethodA()
{
System.Console.WriteLine("StaticMethodA");
}
}
}
namespace B
{
class Point
{
private int x, y;
public Point(int _x, int _y)
{
x = _x;
y = _y;
}
public void Draw()
{
System.Console.WriteLine("B:({0},{1})", x, y);
}
public static void StaticMethodB()
{
System.Console.WriteLine("StaticMethodB");
}
}
}
namespace NetGong
{
class Program
{
static void Main()
{
A.Point pt1 = new A.Point(2, 3);
pt1.Print();
A.Point.StaticMethodA();
B.Point pt2 = new B.Point(2, 3);
pt2.Draw();
B.Point.StaticMethodB();
}
}
}
StaticMethodA
B:(2,3)
StaticMethodB
네임스페이스는 형식 이름과 함께 하나의 이름으로 동작합니다.
예로
-
namespace A 내의 Point는 A.Point 형식입니다.
-
Point 내의 static 메소드 StaticMethodA는 A.Point.StaticMethodA입니다.
-
-
namespace B 내의 Point는 B.Point 형식입니다.
-
Point 내의 static 메소드 StaticMethodB는 B.Point.StaticMethodB입니다.
-
-
namespace NetGong 내의 Program은 NetGong.Program 형식입니다.
-
Program 내의 static 메소드 Main은 NetGong.Program.Main입니다.
-
만약 이름 겹침이 없을 때 네임스페이스를 생략하고자 한다면 using 키워드를 사용할 수 있습니다.
다음은 namespace A를 using 키워드를 사용하여 오픈한 예제입니다.
-
using A;
namespace A
{
class Point
{
private int x, y;
public Point(int _x, int _y)
{
x = _x;
y = _y;
}
public void Print()
{
System.Console.WriteLine("A:({0},{1})", x, y);
}
public static void StaticMethodA()
{
System.Console.WriteLine("StaticMethodA");
}
}
}
namespace B
{
class Point
{
private int x, y;
public Point(int _x, int _y)
{
x = _x;
y = _y;
}
public void Draw()
{
System.Console.WriteLine("B:({0},{1})", x, y);
}
public static void StaticMethodB()
{
System.Console.WriteLine("StaticMethodB");
}
}
}
namespace NetGong
{
class Program
{
static void Main()
{
Point pt1 = new Point(2, 3);
pt1.Print();
Point.StaticMethodA();
B.Point pt2 = new B.Point(2, 3);
pt2.Draw();
B.Point.StaticMethodB();
}
}
}
StaticMethodA
B:(2,3)
StaticMethodB
결과는 위와 같습니다.
여기서 B의 네임스페이스도 없이 사용하려면 어떻게 할까요?
다음은 에러입니다.
-
using A;
using B;
namespace A
{
class Point
{
private int x, y;
public Point(int _x, int _y)
{
x = _x;
y = _y;
}
public void Print()
{
System.Console.WriteLine("A:({0},{1})", x, y);
}
public static void StaticMethodA()
{
System.Console.WriteLine("StaticMethodA");
}
}
}
namespace B
{
class Point
{
private int x, y;
public Point(int _x, int _y)
{
x = _x;
y = _y;
}
public void Draw()
{
System.Console.WriteLine("B:({0},{1})", x, y);
}
public static void StaticMethodB()
{
System.Console.WriteLine("StaticMethodB");
}
}
}
namespace NetGong
{
class Program
{
static void Main()
{
Point pt1 = new Point(2, 3);
pt1.Print();
Point.StaticMethodA();
Point pt2 = new Point(2, 3);
pt2.Draw();
Point.StaticMethodB();
}
}
}
사실 위 내용을 피하려고 '네임스페이스'를 사용하는 것이니까요.
using 키워드의 이름지정을 사용하여 문제를 해결할 수 있습니다.
using의 이름지정을 사용하여 새로운 별명을 만들 수 있습니다.
-
using A;
using BPoint=B.Point;
namespace A
{
class Point
{
private int x, y;
public Point(int _x, int _y)
{
x = _x;
y = _y;
}
public void Print()
{
System.Console.WriteLine("A:({0},{1})", x, y);
}
public static void StaticMethodA()
{
System.Console.WriteLine("StaticMethodA");
}
}
}
namespace B
{
class Point
{
private int x, y;
public Point(int _x, int _y)
{
x = _x;
y = _y;
}
public void Draw()
{
System.Console.WriteLine("B:({0},{1})", x, y);
}
public static void StaticMethodB()
{
System.Console.WriteLine("StaticMethodB");
}
}
}
namespace NetGong
{
class Program
{
static void Main()
{
Point pt1 = new Point(2, 3);
pt1.Print();
Point.StaticMethodA();
BPoint pt2 = new BPoint(2, 3);
pt2.Draw();
BPoint.StaticMethodB();
}
}
}
StaticMethodA
B:(2,3)
StaticMethodB
출력은 위와 같습니다.
마지막으로 지금까지 사용했던 System.Console.WriteLine() 함수는
namespace System 내의 Console 클래스의 정적(static) 함수 WriteLine()을 사용한 것이므로
아래처럼 using System; 을 사용할 수 있습니다.
-
using System;
namespace NetGong
{
class Program
{
static void Main()
{
Console.WriteLine("Hello!");
}
}
}
Console 클래스 => http://msdn.microsoft.com/ko-kr/library/system.console.aspx
여기까지.. ^^
'오래된 흔적 > C#.NET 기초강좌 #1' 카테고리의 다른 글
[HOONS C#.NET 기초강좌 #1] 07. 참조 형식과 값 형식 (0) | 2012.03.05 |
---|---|
[HOONS C#.NET 기초강좌 #1] 05. C# 클래스 (0) | 2012.03.05 |
[HOONS C#.NET 기초강좌 #1] 04. 객체지향 (0) | 2012.03.05 |
[HOONS C#.NET 기초강좌 #1] 03. 함수(Function) (0) | 2012.03.05 |
[HOONS C#.NET 기초강좌 #1] 02. Main() 함수, 변수, 상수 (0) | 2012.03.05 |