네임스페이스는 코드를 논리적 그룹으로 구성하고 이름 충돌을 방지합니다(타입을 위한 폴더와 같음). 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 문과 구별할 가치가 있습니다.)
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기