조금 알아보니, using이라는 키워드는 두 가지 사용방법이 있다.
using System과 같이 namespace와 함께 사용되는 방법, 그리고 리소스 관리를 위한 using문법(제대로 공부하진 않아서 대충 말한거다).
키워드는 같지만 사실상 별개의 개념이 맞는 것 같다. 그렇기 때문에 이번에는 namespace와 함께 사용되는 using 키워드로 공부 범위를 좁히고, 알아볼 생각이다.
처음에는 C++의 #include 같이 '헤더나 파일을 참조해서 해당 파일안에 있는 기능을 사용할 수 있게 하는 문법인가?'라는 착각을 했다. 사실상 using은 C++의 using namespace와 같다. using MyNameSpace을 하게 되면 MyNameSpace를 적지 않아도 MyNameSpace기능을 사용할 수 있다. 여기서 몇가지 의문이 들었다.
1. C++에서 using namespace는 이름의 충돌이 일어날 수 있고, 명시적이지 않다는 이유로 사용을 권장하지 않는 사람도 꽤 있는 것으로 알고 있다. 그러나 C#에서는 기본 프로젝트 템플릿(Visual Studio 2022기준)조차 using System을 사용 할 정도로 당연한 문법이라는 것이 첫번째 의문.
2. using이 #include같은 기능이 아니라면, 도대체 어떻게 다른 파일에 있는 클래스나 기능을 참조해서 사용할 수 있는걸까? 라는 것이 두번 째 의문이다.
1번 의문점에 대한 답.
C++에서는 using namespace를 갖고있는 헤더를 참조하는 다른파일까지 영향을 줄 수 있으나, C#에서는 using의 범위가 선언된 파일 내로 제한되기 때문에 비교적 안전하다고 한다. 즉 C++에 비해서 namespace 오염이 일어날 확률이 적다는 뜻이다. 또한 using의 장점(생산성 Up)도 있으니 이러한 이유로 C++에 비해서 자주 쓰인다고 할 수 있을 것 같다.
2번 의문점에 대한 답.
C#은 같은 프로젝트 내부에 있는 cs 파일들 간 참조가 그냥 가능하다. 더 자세한건 나중에 알아보도록 하자. 어쨋든 중요한건 using이라는 키워드가 #include처럼 파일 참조를 하기 위한 키워드가 아니라는 것이다.
using 키워드는 편의성을 위해 사용한다. 코드를 덜 칠 수 있다. 코드가 간결해지겠지만 명시적이지는 않기 때문에 가독성이 좋아진다고는 말하기 어렵지 않을까. 어쨌든 많이 쓰인다.