Notice
Recent Posts
Recent Comments
Link
«   2026/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
관리 메뉴

I'm FanJae.

[20260507] C# ( namespace ) 본문

Unity/Unity 초격차캠프

[20260507] C# ( namespace )

FanJae 2026. 5. 7. 20:25

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를 사용하면 이를 체계적으로 관리할 수 있다.

 
 
Comments