답변:
덜 유용하고 읽기 / 파싱하기 어려운 방식으로 수행된다는 점을 제외하고는 namespacing 과 동일한 이름을 접두사로 사용 하지 않습니까? 질문 자체가 대답하지 않습니까?
using
, by import xxxxxxxxx as yyy
등으로 정의 된 네임 스페이스에서
using SDL;
것을 선언 하거나 타이핑해야 SDL_*
합니까?
네임 스페이스가있는 대부분의 (모든?) 언어는 객체 지향적 인 경향이 있습니다. 호환되지 않는 구현이 여러 개 있지만 유형에 대해 사람이 읽을 수있는 이름이 여러 번있는 경우가 많습니다. (이것은 객체 지향 재사용에 관한 다른 문제를 가져 오지만, 이것이이 질문에 관한 것이 아닙니다). 예를 들어 Java에는 백그라운드 UI 작업에 사용되는 타이머와 백그라운드 응용 프로그램 (AWT / Swing에 묶이지 않음) 작업에 사용되는 타이머가 있습니다. 네임 스페이스를 사용하면 동일한 이름의 객체가 다른 하위 API에있을 수 있습니다.
네임 스페이스가 존재하는 이유는 다른 개발자가 객체의 이름을 지정할 것을 예상하는 비합리적인 작업과 관련이있었습니다. C ++은 개념을 도입했으며 (적어도 개념에 노출 된 첫 번째 언어였습니다) 모범 사례에 대한 지침이 없어도 도움이되었습니다. Java는 개념을 조정하고 네임 스페이스에 회사 이름을 포함하는 "모범 사례"를 추가했습니다. 그렇게하면 자신의 회사 만 걱정하면됩니다.
접두사는 꽤 지저분해질 수 있습니다. 언제 신청합니까? 언제 않습니다 하지 적용? 구조체 / 클래스 / 글로벌 메소드는 접두사를 가져 옵니까? 방법은 어떻습니까? 구조체의 속성은 어떻습니까? 고맙게도 한 번에 전부는 아니지만 코드에서 이러한 모든 것을 보았습니다. 네임 스페이스는 이러한 모든 질문에 대한 예측 가능성을 제공하며 개인 "모범 사례"가 아닌 언어 기능으로 만듭니다.
네임 스페이스는 좋은 생각이라고 생각합니다. 이름의 범위를 제한하여 이름 충돌을 방지합니다. Java 패키지에서 제안 된 패키지 이름 지정 규칙은 고유 해야하는 도메인 이름을 기반으로 하며 사용자 정의 라이브러리와의 이름 충돌을 방지합니다. 전반적으로, 그들은 넓은 의미에서 이름을 조금 더 독특하게 만들면서도, 프로그래머는 모호한 이름 지정 규칙을 따르지 않고도 그의 이름을 지정할 때 좀 더 자유로울 수 있습니다.
네임 스페이스 / 모듈 / 패키지는 이름 충돌을 피하는 데 유용합니다. 이름 접두사도 있지만 네임 스페이스는 기호를 현재 네임 스페이스로 가져올 수있어 편리하게 추가되므로 전체 네임 스페이스 :: *를 사용하지 않아도됩니다.
Python과 같은 일부 언어는 특정 심볼 만 현재 모듈로 가져 오거나 다른 이름으로 심볼을 가져올 수 있도록하여이 기능을 확장합니다. 일부 클래스 / 함수 / 상수에만 관심이 있거나 일부 심볼이 네임 스페이스의 심볼과 충돌하지만 일부는 그렇지 않은 경우에 유용합니다.
Ruby와 같은 일부 언어를 사용하면 모듈의 메소드를 클래스에 포함시킬 수 있습니다. 다형성 및 제네릭에 유용합니다. 예를 들어, 동일한 방식으로 반복자가있는 여러 클래스가있는 경우 개체의 데이터를 정렬하고 필터링하는 메서드를 제공하는 별도의 모듈에서 이러한 모든 클래스에 메서드를 혼합 할 수 있습니다. 이것은 has a
관계와 is a
(상속) 관계를 허용합니다.
using
특정 네임 스페이스이고 해당 네임 스페이스의 식별자 시작 부분에 접두사를 넣을 필요 가 없다고 말할 수 있습니다 .