네임스페이스는 코드를 논리적 그룹으로 구성하고 이름 충돌을 방지합니다(타입을 위한 폴더와 같음). using 지시문은 네임스페이스를 가져와 그 안의 타입을 짧은 이름으로 참조할 수 있게 합니다. 이 둘은 함께 C# 코드를 구조화하고 방대한 .NET 라이브러리에 접근하게 합니다.
네임스페이스 선언
;
{ }
{
{ }
}
네임스페이스는 관련 타입을 하나의 이름 아래 그룹화하여(MyApp.Services.UserService), 서로 다른 네임스페이스에 있는 같은 이름의 클래스 간 충돌을 방지합니다. 파일 범위 네임스페이스(C# 10)는 중첩을 줄여 줍니다.
using System; // 가져오기 → System.Console 대신 Console 사용
using System.Collections.Generic; // → List<T>, Dictionary<K,V>
using System.Linq; // → LINQ 확장 메서드
using MyApp.Services; // 자신의 네임스페이스
Console.WriteLine("hi"); // `using System;` 덕분에 짧은 이름 사용 가능
var list = new List<int>(); // Generic using 덕분
파일 상단의 using은 네임스페이스를 가져와 그 타입을 짧은 이름으로(정규화된 이름 대신) 사용할 수 있게 합니다. 필요한 .NET 라이브러리를 이런 식으로 가져옵니다.
using Project = MyApp.Models.Project; // 별칭 — 이름 충돌 해결 또는 단축
// global using(C# 10) — 한 번 선언하면 프로젝트 전체에 적용
global using System;
global using System.Collections.Generic;
// → 모든 파일에서 흔한 using을 반복할 필요 없음(흔히 자동 생성됨)
global using(C# 10)은 프로젝트 전체에 대해 가져오기를 한 번 선언합니다 — 최신 .NET은 흔한 것들을 자동 포함하므로(ImplicitUsings), 이제 using System;을 거의 쓰지 않습니다.
using var file = File.OpenText("x.txt"); // using 문 — 자동 해제(다른 기능!)
네임스페이스와 using 지시문은 C# 코드를 구성하고 .NET 생태계에 접근하는 데 기본이므로, 이를 이해하는 것은 필수적인 일상 지식입니다. 네임스페이스는 타입을 논리적 그룹으로 구성하고(폴더 구조를 반영) 이름 충돌을 방지합니다 — 이것이 없으면 클래스가 서로 그리고 방대한 .NET 라이브러리 및 서드파티 패키지와 충돌하게 됩니다. using 지시문은 그 라이브러리에 접근하는 방법입니다. 네임스페이스를 가져와 그 타입(Console, List<T>, LINQ 메서드)을 정규화된 이름 대신 짧은 이름으로 사용할 수 있게 합니다 — 모든 C# 파일은 프레임워크 기능에 접근하기 위해 using에 의존합니다.
네임스페이스를 선언하는 방법(현대적인 파일 범위 구문 포함), using으로 가져오는 방법, 충돌 해결을 위한 별칭 사용, 그리고 global using(C# 10, 흔한 가져오기를 프로젝트 전체에 대해 한 번 선언 — 이제 흔히 ImplicitUsings를 통해 자동 생성되어 상용구 using을 거의 작성하지 않음)을 활용하는 방법을 아는 것은 프로젝트를 구조화하고 프레임워크를 사용하는 데 필요합니다.
네임스페이스와 using을 이해하는 것 — 코드 구성, 충돌 방지, .NET 라이브러리 접근, 상용구를 줄이는 현대적 global/implicit using — 은 모든 C# 개발의 기초입니다. 모든 프로그램은 코드를 네임스페이스로 구성하고 using을 통해 기능에 접근하기 때문입니다. (자동 자원 해제를 위한 다른 기능인 using 문과 구별할 가치가 있습니다.)