C# 네임스페이스 질문입니다.

vscode 환경입니다.
공부할땐 열린디렉토리에서 new console 시작할때
그 디렉토리가 네임스페이스 루트로 알고 있었는데요
오픈소스보니깐 해당 디렉초리하고 네임스페이스 이름이 틀립니다.
어떻게 하면 이름을 달리하여 사용할 수 있는것인가요?

또 하나 각각 다른 콘솔생성해서 서로 간에 네임스페이스/클래스 참조가 가능하낙요?

2개의 좋아요

디렉토리와 네임스페이스의 구조가 100% 같지 않습니다.

디렉토리는 개발자가 코드를 보기 편한 구조로 만들어 둔 것이고,
네임스페이스는 실제 파일(*.exe, *.dll)이 만들어 질 때 어셈블리의 내부 주소와 같다고 보시면 이해하기 쉬울 것 같습니다.

예를들어 src/Algorithm 이라는 폴더를 만들고 내부에 First.cs 파일을 만들었을 때,
VS에서는 자동완성으로 namespace PROJECT_NAME.Algorithm 으로 만들어주지만,
직접 수정하여 namespace PROJECT_NAME.MyFirst로 사용할 수 있습니다.

서로 다른 네임스페이스도 물론 참조할 수 있습니다.

혹여 호기심이 생긴다면 닷넷 디컴파일 툴을 이용해 만들어진 파일을 직접 디컴파일 해보면 바로 아실겁니다.

4개의 좋아요

혹시 자바 보시다가 닷넷 하시나요?
자바는 폴더가 패키지명, 파일명이 public class명이지만 C#은 그런 규칙 없습니다.

하나의 파일에 public class 두개가 들어가도 컴파일러가 태업하는 일은 없습니다. ^^;

2개의 좋아요

몇 가지 상세하게 짚고 넘어가야 할 부분들이 있어 첨언을 드립니다.

지금 다루는 닷넷 런타임이 .NET Framework라면 자바와는 다르게 .csproj 파일의 내용이 중요합니다. .csproj 파일을 Visual Studio IDE에서 열고, 어떤 파일을 컴파일할 지, 또 어떤 파일은 리소스로 넣을지 등을 세부적으로 조정하는 것이 중요한데요, 자바에 비유하면 Maven POM 파일과 비슷하다고 볼 수 있습니다.

지금 다루는 닷넷 런타임이 .NET Framework이면서 IIS 위에서 실행되는 ASP.NET 애플리케이션이라면 두 가지 케이스가 있습니다. 폴더 레벨 프로젝트를 만드셨다면 별도의 .csproj, .vbproj 파일이 필요하지 않습니다. 반면 웹 프로젝트로 만드셨다면 통상적인 .NET Framework 애플리케이션이랑 마찬가지로 .csproj, .vbproj 파일이 중요합니다.

지금 다루는 닷넷 런타임이 .NET Core나 .NET 5 이상이라면, .csproj 파일이 여전히 필요하긴 하지만, .csproj 파일에 일일이 소스 파일을 기재하지 않아도 알아서 컴파일러가 .csproj 파일 아래의 모든 소스 파일들 (.cs)을 자동으로 스캔하여 컴파일시켜줍니다.

참고로 위에서 언급한 .csproj 파일은 모두 msbuild 라는 빌드 엔진을 위한 XML 문법을 가진 파일로, 성격 상 Java의 빌드 시스템인 Maven, Gradle에서 사용하는 POM, Gradle Build Script와 대응되는 포지션을 가지고 있습니다. Java 계통에서는 Eclipse나 JetBrains의 IDE, 혹은 VSCode의 Java Language Server가 이런 파일들을 인지해서 프로젝트 폴더를 하나의 프로젝트처럼 처리하는 것도 비슷합니다.

3개의 좋아요