namespace
네임스페이스는 클래스들을 그룹별로 묶어서 더 체계적으로 관리하기 위한 목적으로 만들어졌다.
네임스페이스를 정의할 때는 키워드 namespace를 사용한다.
큰 프로젝트나 여러 명이 협업하여 만드는 경우 클래스 이름이 같아서 충돌이 생길 수 있다.
이런 경우 네임스페이스가 다르면 같은 이름을 가진 클래스를 만들어도 충돌을 방지할 수 있다.
충돌이 생길 때 마다 클래스명이 같은 지 일일이 비교하며 이름을 수정하는 것 보다 네임스페이스를 만들어서 관리하는 것이 훨씬 체계적이고 효율적이다.
위 코드에서 클래스들은 각각 Player.Contrlller1 , Enemy.Controller1 등으로 참조하게 된다.
네임스페이스의 단적인 예가 지금까지 스크립트를 작성할 때 제일 처음에 사용한 UnityEngine이다.
UnityEngine이라는 이름의 네임스페이스를 사용(using)해서 그 안에 있는 MonoBehaviour , GameObject , Transform , Vectors , Debug 같은 클래스들을 상속 받거나 호출할 수 있었던 것이다.
즉, 네임스페이스 내부에 접근하려면 스크립트 제일 위에 using 키워드를 사용해서 네임스페이스 이름을 적어주어야 한다.
그러므로 위 코드의 경우, 어떤 스크립트 파일의 제일 위에 using키워드를 사용해서 using Player 또는 using Enemy를 선언하면 매번 Player. , Enemy. 을 붙이지 않아도 클래스를 참조하거나 내부에 접근할 수 있다.
또한 다른 네임스페이스에 있는 같은 이름의 클래스를 참조해도 충돌이 일어나지 않는다.
하지만 스크립트 파일에 충돌하는 클래스명을 가진 네임스페이스를 using을 사용하여 동시에 가져오면 충돌이 발생한다. 즉, 위 코드의 경우처럼 Controller1 , Controller2가 같은 이름이므로 스크립트 파일에 using Player와 using Enemy를 동시에 사용하면 컴파일러 에러가 생긴다는 말이다.
간단한 예를 들어서 살펴본다.
위와 같이 네임스페이스 Player에 Controller 클래스가 있을 때 Start메서드에서 Controller인스턴스(객체)를 생성해서 Controller타입의 sampleObject 변수에 넣으려고 하면 다음과 같은 에러 메시지가 뜬다.
"타입 또는 네임스페이스명 Controller는 찾을 수 없다.(using 지시어 또는 어셈블리 참조를 하지 않았는가?)"
위 문제를 해결하는 방법은 2가지다.
첫째. using을 사용한다.
제일 윗 부분에 using Player를 선언해서 네임스페이스 Player에 접근하겠다고 선언하는 것이다.
둘째. 직접 네임스페이스명으로 접근한다.
위 2가지 방법의 사용은 네임스페이스 내부에 자주 접근하는 경우는 using을 사용하는 첫째 방법이 좋고, 그렇지 않는 경우는 두번째 방법을 사용하는 것이 좋겠다.
끝.
Wraven...
'취미로 하는 게임코딩_gameCodingAsHobby > 유니티unity로 게임 만들기' 카테고리의 다른 글
유니티28_C#18_Enum 타입 (0) | 2021.03.13 |
---|---|
유니티27_C#17_인덱서(Indexer) (0) | 2021.03.13 |
유니티25_C#15_구조체(Struct) (0) | 2021.03.09 |
유니티24_C#14_인터페이스(Interface) (0) | 2021.03.06 |
유니티23_C#13_추상 클래스(Abstract class) (0) | 2021.03.06 |