λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸš€ Development/C#

[C#] λ„€μž„μŠ€νŽ˜μ΄μŠ€(namespace) λž€?

by Jay Din 2024. 11. 20.
728x90
λ°˜μ‘ν˜•

λ„€μž„μŠ€νŽ˜μ΄μŠ€(namespace) λž€?

C#의 λ„€μž„μŠ€νŽ˜μ΄μŠ€λž€ μ½”λ“œλ₯Ό λ…Όλ¦¬μ μœΌλ‘œ κ·Έλ£Ήν™”ν•˜κ³  이름 μΆ©λŒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•œ κ΅¬μ‘°μž…λ‹ˆλ‹€.

λ™μΌν•œ μ΄λ¦„μ˜ 클래슀, μΈν„°νŽ˜μ΄μŠ€ 등이 μ—¬λŸ¬ 곳에 μžˆμ–΄λ„ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό 톡해 ꡬ뢄이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

λ„€μž„μŠ€νŽ˜μ΄μŠ€(namespace)의 μ—­ν• 

  1. μ½”λ“œμ˜ 논리적 κ·Έλ£Ήν™”
    • κ΄€λ ¨λœ 클래슀, μΈν„°νŽ˜μ΄μŠ€, ꡬ쑰체, μ—΄κ±°ν˜• 등을 ν•˜λ‚˜μ˜ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œ λ¬Άμ–΄ μ½”λ“œλ₯Ό μ²΄κ³„μ μœΌλ‘œ 정리할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 예: System.CollectionsλŠ” 데이터 ꡬ쑰 κ΄€λ ¨ ν΄λž˜μŠ€λ“€μ„ κ·Έλ£Ήν™”
  2. 클래슀 이름 좩돌 방지
    • λ™μΌν•œ μ΄λ¦„μ˜ ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•΄λ„ μΆ©λŒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    • λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 지정해 μ‚¬μš©ν•˜λ©΄ μ€‘λ³΅λœ μ΄λ¦„μ˜ 클래슀λ₯Ό ꡬ뢄 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  3. 가독성 및 μœ μ§€λ³΄μˆ˜μ„± ν–₯상
    • ν”„λ‘œμ νŠΈκ°€ 컀질수둝 ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œκ°€ λ§Žμ•„μ§‘λ‹ˆλ‹€. λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œ κ·Έλ£Ήν™”ν•˜λ©΄ ν•„μš”ν•œ μ½”λ“œλ₯Ό μ‰½κ²Œ μ°Ύκ³  μœ μ§€λ³΄μˆ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. μ½”λ“œ μž¬μ‚¬μš©μ„± 증가
    • 곡톡 κΈ°λŠ₯을 가진 ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œλ₯Ό λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œ 묢으면 λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œ μž¬μ‚¬μš©ν•˜κΈ° μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

 

λ„€μž„μŠ€νŽ˜μ΄μŠ€(namespace) μ‚¬μš© 예제

1. κΈ°λ³Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ‚¬μš©

C#μ—μ„œ κΈ°λ³Έ μ œκ³΅λ˜λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€λŠ” Systemμž…λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‹€μ–‘ν•œ μœ ν‹Έλ¦¬ν‹° κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

using System;

namespace MyApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!"); // System.Console μ‚¬μš©
        }
    }
}

μ‹€ν–‰ν™”λ©΄

 

2. μ‚¬μš©μž μ •μ˜ λ„€μž„μŠ€νŽ˜μ΄μŠ€

μ‚¬μš©μžκ°€ 직접 λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•΄ κ·Έλ£Ήν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • MathHelper ν΄λž˜μŠ€λŠ” MyCompany.Utilities λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ •μ˜λ¨.
  • using ν‚€μ›Œλ“œλ‘œ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό 가져와 μ‰½κ²Œ 호좜.
using System;

namespace MyCompany.Utilities
{
    public class MathHelper
    {
        public static int Add(int a, int b) => a + b;
    }
}

namespace MyCompany.Application
{
    using MyCompany.Utilities;

    class Program
    {
        static void Main(string[] args)
        {
            int result = MathHelper.Add(3, 5);
            Console.WriteLine($"Result: {result}");
        }
    }
}

 

3. λ„€μž„μŠ€νŽ˜μ΄μŠ€ 쀑첩

쀑첩 λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•΄ 더 μ„ΈλΆ„ν™”λœ ꡬ쑰λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

namespace MyCompany
{
    namespace Utilities
    {
        public class Logger
        {
            public static void Log(string message)
            {
                Console.WriteLine($"[Log]: {message}");
            }
        }
    }
}

class Program
{
    static void Main()
    {
        MyCompany.Utilities.Logger.Log("Application started.");
    }
}

 

4. 별칭(alias) μ‚¬μš©

κΈ΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 이름을 κ°„λ‹¨ν•˜κ²Œ λ³„μΉ­μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

namespace MyCompany.Utilities
{
    public class MathHelper
    {
        public static int Add(int a, int b) => a + b;
    }
}

namespace MyCompany.Application
{
    using MyMath = MyCompany.Utilities.MathHelper;

    class Program
    {
        static void Main()
        {
            int result = MyMath.Add(7, 3);
            Console.WriteLine($"Result: {result}");
        }
    }

}

 

5. 이름 좩돌 ν•΄κ²°

같은 μ΄λ¦„μ˜ ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μžˆμ„ λ•Œ, λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•©λ‹ˆλ‹€.

namespace LibraryA
{
    public class Helper
    {
        public static void Display() => Console.WriteLine("Helper from LibraryA");
    }
}

namespace LibraryB
{
    public class Helper
    {
        public static void Display() => Console.WriteLine("Helper from LibraryB");
    }
}

class Program
{
    static void Main()
    {
        LibraryA.Helper.Display();
        LibraryB.Helper.Display();
    }
}

 

6. κΈ€λ‘œλ²Œ λ„€μž„μŠ€νŽ˜μ΄μŠ€

global:: ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ μ΅œμƒμœ„ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μž μ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

namespace MyCompany
{
    class Program
    {
        static void Main()
        {
            global::System.Console.WriteLine("Hello from global namespace!");
        }
    }
}

 

C#의 κΈ°λ³Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€

 

  • System: 핡심 클래슀(예: Console, String) 포함.
  • System.Collections.Generic: μ œλ„€λ¦­ μ»¬λ ‰μ…˜(예: List, Dictionary).
  • System.IO: 파일 μž…μΆœλ ₯ κ΄€λ ¨ 클래슀(예: Stream, File).
  • System.Linq: LINQ κ΄€λ ¨ λ©”μ„œλ“œ 및 ν™•μž₯ λ©”μ„œλ“œ.

 

 

λ„€μž„μŠ€νŽ˜μ΄μŠ€ 섀계 방법

  • ν”„λ‘œμ νŠΈμ˜ 규λͺ¨μ— 맞게 λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ„€κ³„ν•˜λŠ” 방법
    • μž‘μ€ ν”„λ‘œμ νŠΈ: 단일 λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œ κ·Έλ£Ήν™”.
    • 쀑간 규λͺ¨: CompanyName.ModuleName.
    • λŒ€κ·œλͺ¨: CompanyName.Product.Module.SubModule.

예제:

namespace Contoso.ECommerce.OrderProcessing
{
    public class Order
    {
        public int OrderId { get; set; }
        public string CustomerName { get; set; }
    }
}

 

λ„€μž„μŠ€νŽ˜μ΄μŠ€μ™€ μ–΄μ…ˆλΈ”λ¦¬

  • λ„€μž„μŠ€νŽ˜μ΄μŠ€λŠ” μ½”λ“œ κ·Έλ£Ήν™” λ‹¨μœ„μ΄κ³ , μ–΄μ…ˆλΈ”λ¦¬λŠ” μ½”λ“œ 배포 λ‹¨μœ„μž…λ‹ˆλ‹€.
  • ν•˜λ‚˜μ˜ λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ μ—¬λŸ¬ μ–΄μ…ˆλΈ”λ¦¬μ— 걸쳐 μžˆμ„ 수 있음.
  • 예: System λ„€μž„μŠ€νŽ˜μ΄μŠ€λŠ” mscorlib.dll, System.dll λ“±μ—μ„œ 제곡.

 

λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ μž₯단점

μž₯점:

  • 이름 좩돌 방지
  • μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„± 증가
  • λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ λͺ¨λ“ˆν™”와 ν˜‘μ—… 용이

 

단점

  • κ³Όλ„ν•œ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 뢄리 μ‹œ λ³΅μž‘λ„ 증가
  • λ„€μž„μŠ€νŽ˜μ΄μŠ€ 쀑볡 μ‹œ 관리 어렀움
728x90
λ°˜μ‘ν˜•