본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티unity로 게임 만들기

유니티26_C#16_네임스페이스(NameSpace)

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...