2009-05-31 3 views
1

파일과 디렉토리는 다른 이름 공간을 가질 수 있으며 특정 파일을 식별하는 데 여전히 사용됩니다. 동일한 이름을 가진 파일과 디렉토리를 다른 종류의 것으로 구분할 수 있기 때문입니다.파일과 디렉터리가 별도의 네임 스페이스를 사용하지 않는 이유는 무엇입니까?

원시 필드와 참조 필드도 다른 이름 공간을 가질 수 있습니다 (Java의 경우). 원시 필드와 참조 필드가 같은 이름을 가지면 다른 종류의 것으로 식별 될 수 있습니다.

별도의 네임 스페이스는 다른 곳에서 사용됩니다. 예를 들어, Java에서는 메소드 exampleName()과 필드 exampleName을 가질 수 있으며, 이름은 동일하지만 서로 다른 종류의 것으로 구별됩니다.

+0

메소드 텍스트와 필드 테스트에 같은 이름이 없습니다. –

+0

@ 1800 감사합니다! 나는 종종 텍스트와 테스트를 잘못 입력합니다. 더 나은 이름 ("exampleName")으로 변경했습니다. BTW : 위키로 표시 했으므로 직접 편집 할 수 있습니다.IIUC) – 13ren

+0

@ 1800. 어, 위키 스위치가 계속 머물러 있지 않은 것 같아요. – 13ren

답변

1

저는 이것이 좋은 생각이라고 생각하지 않습니다. 이유는 파일 시스템 코드의 성능과 단순성과 같은 것들이 포함되어 있다고 생각합니다. 디렉토리 목록이 얼마나 많은 다른 네임 스페이스가 있어야한다고 생각 하느냐에 따라 2 개 또는 3 개 이상의 다른 경로로 이동해야한다면 코드가 복잡해질 수 있습니다.

또한 발생할 수있는 최종 사용자의 혼란을 고려하십시오. 현재 우리는 파일 확장자를 사용하여 파일 시스템에서 일종의 네임 스페이스를 사용할 수 있습니다. file.txt와 file.dll 및 file.exe는 모두 같은 디렉토리에 존재할 수 있습니다. 이 파일들이 동시에 존재할 때 어떤 일이 일어나는지는 걱정할 필요가 있습니다. 이것은 바이러스 작성자가 잘못된 기술을 사용하여 잘못된 파일을 클릭하게하는 한 가지 방법이었습니다. 디렉토리와 같은 이름의 파일을 혼동 할 수 있다고 상상해보십시오.

+0

성능면에서 나는 문제가되지 않는다고 생각합니다. 시스템은 그것을 찾기 전에 어떤 종류인지를 알아야한다. (두 개가 같은 이름을 가졌는지 고려해야한다.) 따라서, look up하기 전에 어떤 네임 스페이스를 조사해야 하는지를 알 것이다. 아마도 이유입니다. – 13ren

2

먼저이 질문은 언어에 따라 다릅니다. 순수 OOP 언어에는 원자와 복합 요소가 구분되어 있지 않습니다. 모든 것이 대상입니다. 순수한 함수 언어에서 이와 비슷한 이유로 당신은 같은 이름의 함수와 변수를 가질 수 없습니다.

둘째, 다형 연산이있는 경우 어떤 변수를 참조했는지 알 수있는 방법이 없습니다. 예를 들어, CP 파일과 DIRS에서 작동

cp foo bar 

처럼 때문에 다형성 작업의 파일 및 디렉토리에 대해 서로 다른 네임 스페이스를 가질 수 없으며, 서로 다른 네임 스페이스가있는 경우, 무엇을 알 수있는 방법은 없습니다 그런 뜻 이었습니까.

+0

예, 이것이 하나의 요소입니다. 다른 네임 스페이스가있는 경우 의미하는 네임 스페이스를 표시해야합니다. 필드 대 메소드의 예에서 "()"는이 역할을 구분합니다. 귀하의 "cp"예제에서는 "/ for 디렉토리를 추가하여 수행 할 수 있습니다. 예 : cp foo/bar/번거 로움이 문제가되는지 여부 – 13ren

0

디렉토리와 파일이 반드시 다른 것은 아닙니다. 두 항목은 상위 디렉토리에 있으며 항목이 디렉토리인지 여부를 나타내는 플래그가 있습니다. 디렉토리를 열어서 마치 파일 인 것처럼 읽을 수 있습니다. 특정 작업이 가능한 경우 - 심볼릭 링크가 같은 방식으로 작동합니다. (이 설명은 Unix 파일 시스템 관점으로 치우쳐 있지만 DOS/Windows보기는 거의 같은 방식으로 작동한다고 생각합니다.) 모든 디렉토리 내에서 구성원 이름 세트가 있으며 파일 시스템은 디렉토리가 주어진 이름의 구성원을 하나만 가질 수있는 고유성 제한 조건을 적용합니다.

Java 메소드 이름을 필드 이름과 비교하면 오브젝트 파일의 모든 기호가 단일 네임 스페이스에 있으므로 C에서 전역 함수와 전역 변수를 같은 이름으로 가질 수 없습니다. 그러나 "void foo()"함수가 맹 글링 된 심볼 이름 ("foo__vv"또는 무언가)에 매핑 되었기 때문에 C++로 할 수있었습니다. 따라서 네임 스페이스에있는 키가 필드 "foo"와 메소드 "foo()"에서 다르다는 점에서 별개의 네임 스페이스를 갖고있는 것은 아닙니다. 키 충돌을 얻을 수 없다는 점을 감안할 때 별개의 네임 스페이스처럼 보입니다.하지만 실제 구현 방법은 무엇입니까?

+0

특정 구현이 아닌 효과를 참조하기 위해 네임 스페이스를 사용하고 있습니다. 서로 다른 네임 스페이스에 제공된 이름은 서로 영향을주지 않으며 별개의 네임 스페이스에 있습니다. foo_w "), 별도의 해시 테이블 또는 아마도 다른 방법으로. – 13ren

+0

나는 디렉토리와 파일이 그렇게 다르지 않다는 것에 동의한다 - 그들은 같은 네임 스페이스에 놓일 수 있지만 다른 네임 스페이스에 둘 수있다. 해방 된 옴 - 파일과 디렉토리는 같은 이름을 가질 수 있습니다). 제 질문은, 이전을하는 이유는 무엇입니까? – 13ren

관련 문제