프로그램에 정보 전달하기에 대해
옵션, 기본값, 설정 파일
컴퓨터 프로그램은 크게 일반 사용자를 상대로 하는 사용자 응용 프로그램(user application)과 특정 서비스를 제공하기 위해 시스템을 제어하도록 임무지워진 시스템 프로그램이 존재한다.
전자의 경우에는 사용자의 의도를 프로그램에 전달하기 위해 GUI(Graphic User Interface)를 사용하게 되는데, 버튼, 글상자, 풀다운 메뉴(pull-down menu), 팝업 창(pop-up window) 등이 이에 해당한다. MS Windows 계열의 환경에서는 이것을 컨트롤(control)이라고 부르고 Unix X Window 계열의 환경에서는 이것을 위짓(widget)이라고 부른다.
후자의 경우에는 GUI 대신에 주로 텍스트에 기반한 정보 전달이 주를 이루게 된다. 그래서 사용되는 것이 바로 옵션(option)과 기본값(default value) 그리고 설정 파일(configuration file)이다.
옵션
옵션은 선택권, 선택물이라는 의미를 가지는데 사용자가 프로그램에 정보를 일부 골라서 보낼 필요가 있을 때 사용하는 방법이다.
이런 형태의 옵션 사용은 -t가 대표하는 정보(여기서는 쓰레드의 개수라고 하자)에 3의 값을 전달하고 -f 옵션이 의미하는 autoflush를 사용하는 방식으로 동작하도록 지정하는 것이다.
만약 사용자가 -t 옵션을 지정하지 않는다면 이 프로그램은 t가 가리키는 쓰레드의 개수를 얼마로 정해야 할까? 0개? 1개? 정해지지 않은 옵션 정보의 값을 기본값(default value)라고 한다. 일반적으로 쓰레드의 개수가 0이면 아예 실행이 안 되니까 기본값은 1로 한다고 하자.
다음 코드에서 DEFAULT_THREAD_NUM이라는 이름의 매크로가 기본값을 표시하고 실제 사용하는 변수 thread_num에 이 값을 대입하고 시작했다가 옵션에 -t와 값이 지정되어 있으면 그 값을 대입해서 사용하게 된다.
int main(int argc, char *argv)
{
int is_autoflush = 0;
int thread_num = DEFAULT_THREAD_NUM;
while ((c = getopt(argc, argv, “ft:”)) != EOF) {
switch (c) {
case 'f':
is_autoflush = 1;
break;
case 't':
thread_num = atoi(optarg);
break;
default:
usage(void);
exit(0);
}
}
.
.
.
}
(C 뷰티파이어가 내 코딩 스타일을 이상하게 바꿔놨음)
기본값
기본값은 본질적으로 컴파일 시에 지정하는 것이 바람직하다. 이것은 아무런 사용자의 의도가 반영되지 않은 실행이라 할 지라도 오동작 없이 실행되어야 하기 때문이다. 반면에 옵션은 실행 시에 지정될 필요가 있다. 기본 값으로는 많은 옵션을 대체하거나 보조하는 수단으로 쓰기 어렵다.
설정 파일
옵션에 문제가 생기는 것은 프로그램이 점점 복잡해져서 많은 옵션을 지정해야 하는 상황에 이르게 되는 순간이다. 아무리 셸(shell)이 편한 환경을 제공한다고 하더라도 옵션을 매 실행 시마다 지정하는 일은 참으로 번거롭기 짝이 없다. 특히나 대부분의 옵션 값이 변하지 않을 때에는 더욱 그러하다. 그렇다고 기본 값을 바꿀 수는 없을 때, 이럴 때 필요한 것이 바로 설정 파일이다.
설정 파일은 대부분의 옵션 값이 변하지 않고 일부 옵션의 값이 바뀌어 실행될 필요가 있을 때 유용하다.
AutoflushMode Yes
ThreadNum 10
.
.
.
test.conf라는 이름의 설정 파일을 만들어놓고 이 파일을 프로그램에서 읽어들여 그 값을 사용할 수 있다. is_autoflush 변수의 값은 1이 되고 thread_num 변수의 값은 10이 되는 것이다.
또한 설정 파일의 경로를 지정하는 옵션을 추가함으로써 설정 파일을 여러 개 미리 만들어놓고 바꿔가면서 사용할 수도 있다.
설정 파일에도 단점이 존재하는데 그것은 바로 설정 파일의 기능만 제공되고 옵션 기능이 제공되지 않으면 불편하다는 점이다. 설정 파일만 제공되는 경우 한 번 실행 때마다 매번 설정 파일을 편집기로 열어 수정을 해야 한다면 수많은 옵션을 나열하는 것보다 훨씬 귀찮은 일이 될 것이다. 그러므로 설정 파일은 configuration이 의미하듯 설정의 '형상'을 담아두는 매체로 사용해야 할 것이다. 형상이 바뀌는 일은 자주 일어나지 않지만 바뀌게 되면 한 번에 여러 정보가 함께 바뀔 필요가 있으므로 옵션으로 처리하기에는 적합하지 않지만 지속성을 가지는 파일의 형태로는 적합하다.
많은 시스템 프로그램들이 사용자의 정보를 반영하기 위해 옵션과 기본 값과 설정 파일을 함께 제공한다. 좋은 프로그램이라면 이 세 가지를 모두 제공하는 것이 필수적일 것이다.