I'm FanJae.
[20260507] C# ( namespace ) 본문
1. 네임 스페이스(Namespace, 이름 공간)
(1) 정의
- namespace는 관련 있는 코드 요소들을 하나의 이름 공간으로 묶는 기능이다.
- 클래스, 인터페이스, 구조체, 열거형 등을 그룹화 할 때 사용한다.
namespace Character
{
class Warrior
{
}
class Archer
{
}
}
- 위 코드에서 Warrior와 Archer 는 Character라는 namespace 안에 들어 있다.
(2) namespace가 필요한 이유
- 프로그램의 규모가 커지면, 클래스 수가 많아지고, 이름이 겹칠 가능성도 높아진다.
- 예를 들어, Player 라는 클래스가 Client와 Server에서 각각 사용된다고 생각해본다.
namespace Game.Client
{
class Player
{
}
}
namespace Game.Server
{
class Player
{
}
}
- 이 경우, 둘 다 클래스 이름은 Player 이다. 하지만, 실제 전체 이름은 다르다.
Game.Client.Player
Game.Server.Player
- 즉, namespace 가 다르면 같은 이름의 클래스라도 충돌하지 않는다.
※ 정리하면 아래와 같은 이유에서 사용한다고 볼 수 있다.
1. 관련 있는 코드의 그룹화를 위해
2. 클래스 이름 충돌을 방지하기 위해
3. 코드 가독성을 높이기 위해
4. 프로젝트 구조를 정리하기 위해
5. 대규모 프로젝트를 관리하기 쉽게 만들기 위해
(3) namespace의 사용 예시
① 이름 전체를 적는 방법
- namespace 안에 있는 타입을 사용할 때는 이와 같이 사용할 수 있다.
namespace Character
{
class Warrior
{
}
class Archer
{
}
}
Character.Warrior warrior = new Character.Warrior();
- 여기서 Character.Warrior는 Warrior 클래스의 전체 이름이다.
- 하지만 매번 이렇게 쓰면 코드가 길어지므로, using을 사용해서 namespace를 가져올 수 있다.
② using을 이용한 방법
using Character;
Warrior warrior = new Warrior();
- using 을 사용하면, 해당 namespace 안의 타입을 사용할 때 전체 이름을 생략할 수 있게 해준다.
(4) namespace의 중첩
- namespace는 중첩해서 사용할 수도 있다.
namespace Game
{
namespace Characters
{
class Warrior
{
public void Attack()
{
Console.WriteLine("공격");
}
}
}
}
- 이 경우, Warrior의 전체 이름은 다음과 같아진다.
Game.Characters.Warrior
- 다만 점 표기법을 이용해서 중첩하는 것도 가능하다.
namespace Game.Characters
{
class Warrior
{
public void Attack()
{
Console.WriteLine("공격");
}
}
}
- 앞에서 다뤘던 중첩 방식과 이 중첩 방식의 의미는 동일하다.
(5) namespace의 분리
- namespace는 파일이나 코드 위치가 달라도 같은 이름을 사용할 수 있다.
- 즉, 이렇게 나누는 것도 가능하다.
// Monster.cs
namespace Game
{
class Monster
{
}
}
// Slime.cs
namespace Game.Monster
{
class Slime
{
}
}
// Goblin.cs
namespace Game.Monster
{
class Goblin
{
}
}
- namespace는 같은 프로젝트(어셈블리로 컴파일 되는 코드 단위) 안에서 하나로 묶인다.
- 따라서, 위와 같이 파일의 위치가 달라도 나누어 사용 가능하다.
(6) namespace의 별칭
- namespace나 타입 이름이 너무 길거나, 이름 충돌이 발생할 때는 별칭을 만들 수 있다.
using GameWarrior = Game.Characters.Warrior;
GameWarrior warrior = enw GameWarrior();
(7) namespace의 활용 예시
① 공통 기능의 분리
- namespace는 공통 기능을 분리할 때도 자주 사용한다.
namespace Game.Utils
{
static class MathTool
{
public static int Add(int a, int b)
{
return a + b;
}
public static int Multiply(int a, int b)
{
return a * b;
}
}
static class StringTool
{
public static string ToUpper(string str)
{
return str.ToUpper();
}
}
}
② 이름 충돌 정리
- 서로 다른 시스템에서 같은 이름의 enum이 필요할 수도 있다.
namespace PlayerSystem
{
enum State
{
Idle,
AttackStart,
AttackEnd
}
}
namespace UISystem
{
enum State
{
Open,
Close,
ClueStart,
ClueEnd
}
}
- 둘 다 State라는 이름을 사용하지만, namespace가 다르기 때문에 충돌하지 않는다.
(8) 정리
- namespace는 관련 있는 클래스, 인터페이스, 구조체, 열거형 등을 묶는 이름 공간이다.
- 프로젝트 규모가 커질수록 클래스 이름이 겹치거나 코드가 복잡해 질 수 있다.
- namespace를 사용하면 이를 체계적으로 관리할 수 있다.
'Unity > Unity 초격차캠프' 카테고리의 다른 글
| [20260508] C# (Upcasting, Downcasting, is / as) (1) | 2026.05.08 |
|---|---|
| [20260507] C# ( 추상 클래스 & 인터페이스의 차이점 ) (0) | 2026.05.07 |
| [20260507] C# ( 추상 클래스, 인터페이스 ) (0) | 2026.05.07 |
| [20260506] C# ( 오버로딩 & 오버라이딩 차이점 ) (0) | 2026.05.06 |
| [20260506] C# (캡슐화, 상속, 다형성) (0) | 2026.05.06 |