어제 알아보기로 한 네임스페이스에 관하여 알아보았다.
사실 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;이라고 작성해주면 해결된다.