Ruby, __FILE__ 과 $0의 유용성

루비로 개발을 하면서 Java와 다르게 재미난(?) 환경 변수가 있다는걸 알게되었는데, 그게 __FILE__ 과 $0 이다.

__FILE__은 현재 실행 되고 있는 ruby file path, $0는 main으로 실행된 ruby file path, 즉 첫번째로 실행된 ruby file을 알려준다. 어떻게 보면 별거 아닌 것일 수도 있는데, 여러 작업에서 유용하게 쓰인다.

1. main script 작성에 활용


# 현재 파일이 main으로 실행되었는지 확인하는 구문
if __FILE__ == $0 then
# main  code 작성
end

 Ruby가 script언어이다 보니 Java나 C같은 언어와 다르게 프로그램의 시작을 알려주는 main이란  구역이 없다.  이런 단점은 main역할을 하는 code를 담고 있는 script가 다른 module에서 로드될때 많은 골칫거리를 만들어 내게 하는데,  이부분은 __FILE__과 $0로 쉽게 해결 가능하다.
위 코드의  if문 안의 코드들은 현재의 파일이 main으로 실행되었을 때만 작동하므로  Java나 C의 main과 다를 것이 없다.

 

2. require 경로를 상대적으로 기술

home = File.join(File.dirname(__FILE__), ‘/..’)
require File.join(home, ‘lib/usage_collector’)

그냥 require(path)를 하게되면 실행 path의 영향을 받기 때문에 상황에 따라 require가 파일을 제대로 찾지 못할 경우가 많다. 대표적으로  gem으로 잘 돌아가던게 소스로 받아서 돌리면 안되거나 source로 실행할때는 잘되던게 gem으로 만들면 안돌아간다.
초기 작성시 위의 소스 코드처럼 __FILE__을 사용하여 home을 확실하게 지정해주면 require 엄한 위치를 헤메는 일이 없어진다. 이렇게 작성해 놓으면 gem으로 실행하든 source 상태로 실행하든 상관없이 잘 돌아간다.

 

3. 그외 이런저런 파일 작업을 다룰때에도…
그외에도 파일을 다루다보면 기준 경로를 어디로 잡을 것인지가 매우 골치아픈 문제이다. __FILE__과 $0 이런 문제들을 쉽게 해결할 수 있는 단서를 제공해준다.

 

2526 Total Views 1 Views Today

Leave a Reply