경로
경로 (Paths)
Racket에서 파일 시스템 경로를 다룬다고 하면, 경로를 문자열로 넘길 수도 있고 path 데이터 타입의 값으로 넘길 수도 있어요. Racket의 함수들은 이 두 가지 형태를 모두 받아들이며, 내부적으로는 플랫폼별 규칙에 따라 경로를 정리하고 다루게 돼요. 여기서는 그 기본 규칙들을 함께 살펴볼게요.
출처: Racket Reference
본문
Racket 프로시저가 파일 시스템 경로를 인자로 받을 때, 경로는 문자열로 주거나 path 데이터 타입의 인스턴스로 줄 수 있어요. 문자열이 주어지면 string->path를 사용해 경로로 변환해요. 단, 어떤 경로는 문자열로 표현할 수 없는 경우가 있으니 주의해야 해요. 자세한 내용은 Unix Path Representation과 Windows Path Representation을 참고하세요. 파일 시스템 경로를 만들어내는 Racket 프로시저는 항상 path 값을 만들어 돌려줘요.
기본적으로 경로는 현재 플랫폼을 기준으로 만들어지고 조작돼요. 다만 파일 시스템을 쓰지 않고 경로만 단순히 다루는 프로시저들은, 지원되는 다른 플랫폼의 규칙으로 경로를 다룰 수도 있어요. bytes->path 프로시저는 경로의 플랫폼을 나타내는 선택 인자를 받는데, 'unix 또는 'windows를 지정하면 돼요. build-path나 simplify-path 같은 다른 함수들의 동작은 주어진 경로의 종류에 따라 달라져요. 별다른 언급이 없다면, 경로가 필요한 프로시저는 현재 플랫폼용 경로만 받아들여요.
두 경로 값은 같은 규약(convention) 종류를 사용하고 바이트 문자열 표현이 서로 같을 때 equal?로 취급돼요. 경로 문자열(또는 바이트 문자열)은 비어 있을 수 없고, nul 문자나 바이트를 포함할 수 없어요. 빈 문자열이나 nul을 포함한 문자열을 absolute-path?, relative-path?, complete-path?를 제외한 어떤 프로시저에 경로로 주면 exn:fail:contract 예외가 발생해요.
대부분의 Racket 기본 프로시저는 경로를 받으면 사용하기 전에 먼저 경로를 정리(cleanse)해요. 경로를 만드는 프로시저나 경로의 형태만 검사하는 프로시저는 경로를 정리하지 않아요. 다만 cleanse-path, expand-user-path, simplify-path는 예외로 정리를 수행해요. 경로 정리와 다른 플랫폼별 세부 사항에 대한 더 자세한 내용은 Unix and Mac OS Paths와 Windows Paths를 참고하세요.
더 알아보기
- Operating System — 운영 체제 기능 전반에 대한 장.