관심있는 것들 정리

require와 autoload 차이 본문

utility 사용법/emacs

require와 autoload 차이

내공강화 2015. 4. 9. 00:32

설치된 Extension은 Emacs에 로딩되도록 설정파일에 설정해두면 사용할 수 있다. 다시 말해, 로딩이 되지 않으면, Extension을 설치해도 Emacs에서 사용할 수 없기 때문에, Extension을 설치했는데도 이용할 수 없는 경우에는 설정 파일을 다시 한 번 살펴볼 필요가 있다.

 

## require autoload 차이

  Extension을 로딩하는 방법으로는 처음부터 모두 로딩하는 방식(require)과 command로 등록해 두고 실행할 때 로딩하는 방식(autoload) 두 가지 종류가 있어, Extension에 따라 구분해서 사용할 수 있다

  • require

  require는 가장 기본적인 Extension 로딩 방식으로 설치한 Extension이 require를 사용해 로딩하는 것이라면 보통은 다음과 같이 사용하여 로딩한다.

 

 

(require   FEATURE    FILENAME    NOERROR)

 

  Extension에 정의된 FEATURE 1 를 이용해 로딩한다. 한번 로딩된 Extension은 다른 위치에서 require 로 기술되어 있어도 반복해서 로딩되지 않는다. 혹시 Extension에 FEATURE가 정의되어 있지 않으면 require로 로딩을 못할 수 있지만, 보통 FEATURE를 가지고 있지 않은 Extension은 거의 없어 걱정할 필요는 없다. 그리고 ‘FILENAME’을 포함, 이후의 parameter는 생략 가능하다.

 

  require 가 실패하면 에러를 출력하고, 이후 로딩이 정지되지만, 세 번째 인수인 ‘NOERROR’에 대해 nil이 아닌 값 2을 사용하면, require 수행 시 에러가 발생해도 처리를 정지시키지 않고 nil이 반환된다. 이를 이용하면, Extension 로딩에 성공한 경우에만 유효화하는 설정 등을 작성할 수 있다.

 

  • autoload

  autoload는 require와 달리, 등록한 function(command)을 실행할 때, 지정한 Extension 파일을 로딩한다. 초기 Emacs 구동 시 모든 것을 로딩하지 않기 때문에, require와 비교해 구동 시간이 빨라지고 메모리도 절약할 수 있지만, 확장기능 파일이 가지고 있는 변수도 function 실행 시에 정의되기 때문에, 몇 가지 주의가 필요하다. 

  autoload 사용법은 다음과 같다.

 

(autoload    FUNCTION    FILENAME   DOCSTRING   INTERACTIVE    TYPE)

 

  autoload는, ‘FUNCTION’과 ‘FILENAME’(확장자는 불필요)을 이용한다. require는 FEATURE를 지정하지만, autoload에서는 FILENAME을 지정하는 것에 주의해야 한다. ‘DOCSTRING(설명)’을 기술해 두면, FUNCTION의 정의(funciton’s real definition)를 로딩하지 않고도 설명을 볼 수 있다. 또 ‘INTERACTIVE’에 nil이 아닌 값을 설정하면 FUNCTION을 command로 실행할 수 있다(즉 M-x로 실행 가능). ‘TYPE’ 값을 keymap이나 macro로 설정하면 설정대로 로딩할 수 있다. 그리고 ‘DOCSTRING’ 을 포함, 이후의 parameter는 생략 가능하다.

 

-----------------------------------------

1 Extension 파일에 (provide ‘FEATURE)과 같은 형태로 정의되어 있음

2 일반적으로 t를 지정한다

반응형