함수 파일
함수 파일 (Function Files)
간단한 일회용 프로그램을 제외하면, 필요할 때마다 필요한 모든 함수를 매번 정의하는 것은 비현실적이에요. 대신 함수를 파일에 저장해 두고 나중에 쉽게 편집하고 재사용하고 싶을 거예요.
출처: 문서
본문
간단한 일회용 프로그램을 제외하면, 필요할 때마다 함수를 일일이 정의하는 것은 실용적이지 않아요. 대신 함수를 파일에 저장해서 쉽게 편집하고 나중에 쓸 수 있게 해두는 게 일반적이에요.
Octave는 함수 정의를 사용하기 전에 반드시 파일에서 불러오도록 요구하지 않아요. 함수 정의를 Octave가 찾을 수 있는 곳에 두기만 하면 돼요.
Octave가 정의되지 않은 식별자를 만나면, 먼저 이미 컴파일되어 심볼 테이블에 현재 등록된 변수나 함수를 찾아요. 거기서 정의를 찾지 못하면, 그 정의되지 않은 식별자와 같은 기본 이름을 가진 .m 파일을 디렉토리 목록(경로)에서 검색해요. 이름이 맞는 파일을 찾으면 그 파일의 내용을 읽어요. 단일 함수를 정의한다면 그 함수를 컴파일하고 실행하죠.
Octave가 함수 파일에서 함수를 정의할 때는 읽은 파일의 전체 이름과 타임스탬프를 저장해요. 파일의 타임스탬프가 바뀌면 Octave는 파일을 다시 불러올 수 있어요. 대화형으로 실행 중일 때 타임스탬프 검사는 보통 Octave가 프롬프트를 출력할 때마다 최대 한 번 발생해요. 현재 작업 디렉토리가 바뀌면 새 함수 정의 검색도 수행돼요.
타임스탬프를 검사하는 덕분에 Octave가 실행되는 동안 함수 정의를 편집하면, 세션을 다시 시작하지 않고도 새 함수 정의를 자동으로 사용할 수 있어요.
잘 바뀌지 않을 함수들의 타임스탬프를 검사해 성능을 불필요하게 떨어뜨리지 않도록, Octave는 octave-home/share/octave/version/m 디렉토리 트리의 함수 파일들은 바뀌지 않을 것으로 가정하고 타임스탬프를 매번 검사하지 않아요. 이는 일반적으로 매우 합리적인 가정이며, Octave와 함께 배포되는 함수 파일들의 성능을 크게 향상시켜요.
자신의 함수 파일이 Octave 실행 중에 바뀌지 않을 것임을 안다면 ignore_function_time_stamp ("all")를 호출해 모든 함수 파일의 타임스탬프를 무시하도록 해 성능을 높일 수 있어요. 이 함수에 "system"을 전달하면 기본 동작으로 되돌아가요.
edit 함수는 이름이 지정된 함수를 편집하거나 에디터 설정을 바꿔요. edit를 파일 또는 함수 이름과 함께 호출하면 기본 텍스트 에디터에서 열려요. Octave GUI의 기본 에디터는 Preferences의 Editor 탭에서 지정돼요. CLI의 기본 에디터는 EDITOR 함수로 지정되죠.
- 함수
name이 경로의 파일에 있으면 에디터에서 열려요. 파일을 찾지 못하면.m으로 끝나는 m-file 변형을 고려해요. 그래도 파일이 없으면@로 시작하는 변형, 그리고@로 시작하고.m으로 끝나는 변형을 차례로 고려해요. name이 명령줄 함수의 이름이면 그 함수와 현재 정의를 담은 m-file을 만들어요.name.cc가 지정되면 경로에서name.cc를 찾아 에디터에서 열어요. 파일을 찾지 못하면 새.cc파일을 만들어요.name이 m-file이나 명령줄 함수라면 그 함수의 텍스트가 주석으로.cc파일에 삽입돼요.name.ext가 경로에 있으면 편집되고, 없으면 현재 디렉토리에name.ext를 파일 이름으로 에디터를 시작해요.
경고: 새 정의를 사용할 수 있게 되기 전에 name을 지워야 할 수도 있어요. .cc 파일을 편집한다면 정의를 사용할 수 있게 하려면 mkoctfile name.cc를 실행해야 해요.
edit는 여러 제어 필드를 지원해요: author(새 함수의 "## Author:" 뒤에 넣을 이름), email, license(gpl, bsd, pd, 또는 자신의 기본 저작권·라이선스 텍스트), mode(async/sync), editinplace, home 등이 있어요.
mfilename은 현재 실행 중인 파일의 이름을 반환해요. 현재 실행 중인 스크립트나 함수의 기본 이름을 확장자 없이 반환하죠. m-file 밖(예: 명령줄)에서 호출하면 빈 문자열을 반환해요. "fullpath" 인자를 주면 파일 이름의 디렉토리 부분을 포함하지만 확장자는 제외해요. "fullpathext"를 주면 디렉토리 부분과 확장자를 모두 포함하죠.
ignore_function_time_stamp는 Octave가 함수 파일에 정의된 함수를 찾을 때마다 파일의 타임스탬프를 검사할지 제어하는 내부 변수를 조회·설정해요.
"system"으로 설정하면 Octave는octave-home/share/version/m하위 디렉토리의 함수 파일들을 마지막 컴파일 이후 변경되어도 자동으로 다시 컴파일하지 않아요. 하지만 검색 경로의 다른 함수 파일들은 변경되면 다시 컴파일해요."all"로 설정하면clear로 정의를 제거하지 않는 한 어떤 함수 파일도 다시 컴파일하지 않아요."none"으로 설정하면 항상 파일의 타임스탬프를 검사해 함수 파일에 정의된 함수를 다시 컴파일할지 결정해요.
더 알아보기
- 로드 경로 조작, 서브함수, 프라이빗 함수, 중첩 함수, 오버로딩, 함수 잠금, 함수 우선순위에 대한 내용을 이어서 보면 좋아요.
.m접미사는 MATLAB과의 호환성을 위해 선택된 것이에요.