안녕하세요.

프로그래밍을 하다보면, 경로에 관한 것을 처리하곤 합니다.

이때 어떤 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

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts