본문 바로가기
카테고리 없음

[Unity, C++] 네임스페이스의 단점 Unity C# Using System; , C++ using namespace std;를 지양하는 이유, 범위지정연산자

by 왹져박사 2023. 7. 13.
728x90

어제 알아보기로 한 네임스페이스에 관하여 알아보았다.

사실 8개월정도 의문을 품고있었으면서도 이런 내용을 찾아보지 않고 공부하고있었다는점이 부끄럽고 반성하게되었다. 

뭐라고 검색해야할지 몰라 using namespace std와 std::를 같이 검색하다 몇가지 글을 찾았다. 

내용을 더 찾아보고싶다면 'using namespace/네임스페이스 단점'이라고 검색한다면 찾기 쉬울 것이다. 

 

-본론-

Unity에서 using System; 대신 System.을 사용하는 이유, 

C++에서 using namespace std;대신 std::를 사용하는 이유는 무엇일까?

 

using 의 장점

1. 전체적인 코드가 짧아짐

2. 가독성이 좋아짐

개발자의 편의성을 우선적으로 생각한다면 using을 사용하여 선언하겠지만, 개발자가 지향해야하는 방향은 아닌 듯 하다..

 

using의 단점

1. 충돌가능성↑ (추가되는 코드, 협력...)

2. ㄴ유지보수성↓

무조건적으로 유지보수성이 떨어지는것은 아니다. 하지만 아직 진행중이고, 앞으로 진행하는 과정에서 호출한 함수가 충돌을 일으킬 수도 있다. 그 상황이 닥친 후 수정하는것보다, 처음부터 어느정도 미래를 보고 코드를 작성하는 것이 중요하다고 생각한다. 

물론 매번 std::를 작성하는것이 귀찮을수도 있다. 이에 cin, cout와 같이 많이 사용되게 되는 함수들은 using std::cin;과 같이 해당 함수를 사용하겠다고 선언할 수 있다. 

 

* :: 는 범위지정연산자이며 앞에 적힌 클래스에서 선언한 함수를 참조할 수 있다. 

 

충돌 실화)

Unity에서 실제로 자주 겪었던 일이다. 아마 대부분 처음 배울 때 겪었던 일이라고 생각한다. 

기본적으로 using UnityEngine;을 사용하는데, using System;을 선언했다면 Random.Range()를 사용한 경우  '모호한 참조입니다'라는 오류가 뜬다. 

이 경우에는 System.Random.Range()를 사용하거나 네임스페이스 선언에 Random = System.Random;이라고 작성해주면 해결된다. 

 

 

 

728x90