프로그래밍을 하다보면, 경로에 관한 것을 처리하곤 합니다.
이때 어떤 API는 절대 경로
로 처리를, 또 다른 API는 상대 경로
로 처리를 하곤 합니다.
절대 경로
, 상대 경로
의 개념이 확실하지 않으면 생각보다 프로그래밍하기 까다롭습니다.
그래서, 오늘은 프로그래밍에서 자주 쓰이는 개념인 절대 경로
와 상대 경로
에 대해 포스팅 합니다.
절대 경로
란?
컴퓨터의 파일을 찾아가는 방법은 절대 경로
로 파일을 찾는 방법 한가지 뿐입니다.
절대 경로
란 최초의 시작점으로 경유한 경로를 전부 기입하는 방식입니다.
윈도우 OS의 바탕화면에 위치한 test.txt
파일을 예로 들어봅시다.
test.txt
파일의 절대 경로는 최상위 루트 디렉토리인 C 디렉토리 로부터 시작되어 아래와 같이 구성됩니다.
C:\Users\UserID\Desktop\test.txt
어떠한 OS던 이렇게 최상위 루트 로부터 경유한 경로를 전부 기입한 절대 경로
로만 파일을 찾을 수 있습니다.
그렇다면, 상대 경로
는 왜 탄생했으며 어떻게 파일을 찾는 걸까요?
상대 경로
란?
상대 경로
는 상대적 이라는 단어로 개념을 설명해보려 합니다.
네이버 단어 사전에 나와 있는 상대적 은 아래와 같습니다.
서로 맞서거나 비교되는 관계에 있는. 또는 그런 것.
여기서 중요한건 비교 관계 입니다. 상대 경로
는 항상 비교할 대상이 있어야 합니다.
즉, 우리가 프로그래밍을 할 때도, 상대 경로를 읽을 때도 어떤 경로로 부터 비교하는지를 염두해야 합니다.
예로 아래와 같은 상대경로 두개로 설명하려 합니다.
Desktop\test.txt
test.txt
첫번째 상대 경로
는 무얼 뜻하며, 두번째 상대 경로
는 무얼 뜻하는 걸까요?
확실한건, OS에게 저렇게 경로를 알려준다면 OS는 파일의 위치를 찾지 못합니다.
앞서 말했드시 OS는 절대 경로
로 파일을 읽는 방법 밖에 없습니다.
위의 2개의 상대 경로
는 C:\Users\UserID\Desktop\test.txt 를 의미할 거 같지만 비교 대상이 누구인지에 따라, 경로가 천차만별로 바뀝니다.
상대 경로
의 비교 대상이 만약, C 드라이버의 Mommoo 디렉토리라면,
위의 2개의 상대 경로
는 아래와 같이 절대 경로
로 해석됩니다.
C:\Mommoo\Desktop\test.txt
C:\Mommoo\test.txt
우리 머리속에 담아져 있는 C:\Users\UserID\Desktop\test.txt 경로라는 아예 다른걸 볼 수 있습니다.
결론적으로, 상대 경로
는 기준 경로를 기준으로 절대 경로
가 구성되며, 상대 경로
로 파일의 위치를 찾을 수 있는 이유는 기준 경로가 절대 경로
로 변환하여 OS에게 전달 하기 때문입니다.
상대 경로
가 왜 필요할까?
절대 경로
는 정적인 문자열로 특정 컴퓨터의 파일 위치를 정확히 알려줍니다.
하지만, 경로를 다룰때는 이러한 정적인 특징이 오히려 단점으로 다가올 수도 있습니다.
예를들어, test.txt
의 경로가 항상 자주 바뀌는 상황이거나 루트 디렉토리가 서로 다른 OS들을 다룬다면 어떨까요?
정적인 특징 때문에 전자는 절대 경로
로 작성된 모든 문서를 다시 작성해야 하며, 후자는 OS 별로 절대 경로
를 작성해서 관리해야 해야 합니다.
윈도우 OS 같이 GUI로 파일을 더블클릭 해서 들어가지만, GUI가 없는 리눅스는 디렉토리를 접근할 때마다 절대 경로
로 풀 패스를 적어야 합니다.
영타를 잘 못쳐서 경로 오타 나는거 생각하면 끔찍...
만약 상대 경로
를 이용하여, 비교 대상이 우리에게 주어지는 상황이라면 위에서 언급한 문제를 해결 할 수 있습니다.
해당 개념을 프로그래밍에 적용해봅시다.
JAVA
프로그래밍을 예로 들어 봅시다.
JAVA
의 파일 객체를 생성 한다면, 아래와 같이 사용 할 수 있습니다.
public class Main {
private static final String ABSOLUTE_FILE_PATH = "C:\Users\UserID\Desktop\test.txt";
private static final String RELATIVE_FILE_PATH = "test.txt";
public static void main(String[] args) {
File absoluteFile = new File(ABSOLUTE_FILE_PATH);
File relativeFile = new File(RELATIVE_FILE_PATH);
}
}
첫 번째 파일 객체는 절대 경로
를 사용했으므로, 해당 경로의 파일을 참조합니다.
두 번째 파일 객체는 상대 경로
를 사용했는데, 어떤 해당 경로의 파일을 참조 할까요?
위에서 설명했드시, 비교 대상 을 생각해야 합니다.
비교 대상은 위에서 작성한 Main.java
파일이 들어있는 디렉토리 기준입니다.
만약 Main.java
파일이 C:\Users\UserID\workspace\Test\src 경로에 존재 한다면,
상대 경로
인 test.txt는 절대 경로
C:\Users\UserID\workspace\Test\src\test.txt로 바꾸어 전달 합니다.
정리하자면, 첫 번째 파일 객체는 C:\Users\UserID\Desktop\test.txt 경로에,
두 번째 파일 객체는 C:\Users\UserID\workspace\Test\src\test.txt 경로를 참조하는 것입니다.
결론적으로
요약하자면, 절대 경로
란 최상위 디렉토리가 반드시 포함 된 경로를 의미하며 상대 경로
란 현재 디렉토리(비교 대상)
설명한 개념을 적용해서 프로그래밍을 한다면, 경로 처리는 완벽하게 할 수 있을거라 생각합니다.
오늘 포스팅은 여기까지 입니다.
읽어주셔서 감사합니다.
'용어정리 > 프로그래밍용어' 카테고리의 다른 글
형상관리의 개념과 이유 (0) | 2017.11.01 |
---|---|
비즈니스 로직(Business Logic)이란? (15) | 2017.05.24 |
DTO와 VO란? (2) | 2017.02.08 |
GET방식 과 POST방식 (32) | 2016.12.10 |
컴포넌트(Component)란? (8) | 2016.10.20 |
포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.