Java

경로(Path) 설정시 *, ** 차이

천방지축 개발노트 2023. 4. 13. 21:43
별표 == 애스터리스크(Asterisk) == 와일드카드(Wildcard)

XML 설정파일에서의 경로 설정

한국어로는 별표인 *는 애스터리스크 또는 와일드카드라고 불리는데, 개발 소스에서 각종 path 설정을 하는데 있어 자주 사용되기에 정확하게 어떤 의미인지 궁금했다. 찾아보면 Spring설정 파일을 포함하여 많은 프로그래밍 언어에서 패턴 또는 Select쿼리에서 다른 문자를 일치시키거나 대체하는데 사용된다고 설명돼있다.
쉽게 정리하자면, * 와 ** 는 여러 파일 및 디렉토리와 일치하는 경로 또는 특정 패턴을 지정하는데 사용하는 문자다.

 

추가적으로 동일한 의미인 애스터리스크와 와일드카드가 마치 서로 다른 용어처럼 불리는 이유는 사용되는 분야나 문맥에 따라 다르기 때문이다.

1) 애스터리스크(Asterisk) : 일반적으로 프로그래밍 언어(특히 C, C++, JAVA 등)에서 사용되는 용어.

2) 와일드카드(Wildcard) : 검색 엔진이나 파일 검색 등에 사용되는 용어.

 

 

* 와 ** 의 차이점

1) ** : 0개 이상의 디렉토리 및 모든 하위 디렉토리를 의미.

path="/path/**/*file.txt"

위 경로 예시에서의 의미는 "/path" 디렉토리 아래의 모-든 디렉토리 및 그 하위에 있는 모든 디렉토리 내에서 "file.txt"로 끝나는 모든 파일을 포함한다는 것을 뜻한다.

※ 현재 디렉토리인 "/path" 아래에 바로있는 file.txt파일도 포함.


2) * : 단일 디렉토리 or 파일 이름에서 0개 이상의 문자와 일치해야함을 의미.

path="/path/*/*file.txt"

위 예제의 의미는 "/path" 디렉토리 밑에 있는 단일 디렉토리 내에서 "file.txt"로 끝나는 모든 파일을 뜻한다.

 

첫번째 예시에서의 ** 패턴과 다르게 * 패턴을 사용했기 때문에, "/path"디렉토리에 바로 존재하는 "file.txt"라고 끝나는 이름의 파일은 무시하고, 하위의 단일 디렉토리에서만 일치시킨다는 점에 유의해야 한다. 

※ 추가적으로 * 는 하위 디렉토리의 하위 디렉토리같은 더 깊은 수준의 경로에서는 일치시키지 않는다.