첫 튜토리얼에서는, 다이얼로그 박스에 "파일 필터"를 입력해서 프로그램이나 웹 서버 로그파일만을 읽어오게 했었습니다. 이 로그파일 위치는 프로그램에 직접 기술했습니다. 현재, 이 변수들을 격납하는 인스턴스 변수는 WebLog 클래스의 메서드에서 초기화(설정)되어 있습니다. 이것은 반드시 변경해야 합니다. WebLog 클래스에 이 변수들의 getter와 setter 메서드를 작성할 필요가 있습니다. 그렇게 하므로서, WebLogGUI 클래스에서 그것들의 변수에 억세스할 수 있습니다.
이 레슨에서는 두 개의 입력 필드를 작성하겠습니다. 이 필드에는 로그파일 위치와 로그파일만을 선택하기 위해 사용되는 필터를 유저가 지정합니다.
1. System Browser 윈도우가 아직 열려있을 것입니다(WebLogStats 패키지가 선택된 상태로). 만일 그렇지 않은 경우엔 System Browser를 이용해서 WebLogStats 패키지를 선택해주십시오.
2. WebLog 클래스를 선택해주십시오. 인스턴스 탭이 선택된 것을 확인해주십시오.
3. 프로토콜 Pane에서 <오퍼레이트 클릭>후 New...를 선택해주십시오.
4. 표시된 다이얼로그에 accessing을 입력하고 OK를 클릭해주십시오(이미 존재하는 경우에는 작성할 필요가 없습니다.).
코드 Pane에 텍스트가 표시됩니다. 이것은 메서드를 작성하기 위해 사용하는 "템플릿"입니다.
5. accessing 프로토콜 하위에 아래와 같이 네 개의 메서드를 작성해주십시오(이미 작성된 경우엔 아무것도 할 필요가 없습니다.).
6. initialize 메서드(initialize-release 프로토콜)의 logDirectory 변수의 값을 초기화하는 코드행을 코멘트로 만들거나, 혹은 삭제해주십시오.
7. start 메서드(private 프로토콜) 아래 코드행을 코멘트로 만들거나 혹은 삭제해주십시오.
filter:=Dialogrequest:'Please enter a filter 'initialAnswer:'ws00'.
8. GUI페인터 툴 윈도우가 열려있는 경우, 그곳으로 되돌아가주십시오. 만일 열려있지 않은 경우, WebLogGUI를 열어주십시오(이전 12-15레슨을 참조).
9. 캔버스에 라벨과 입력필드를 배치해주십시오.
라벨의 문자열 속성에 File Filter를 설정
입력 필드의 Aspect 속성에 filterUI를 설정
10. 캔버스에 별도의 라벨과 입력필드를 배치해주십시오.
라벨의 문자열속성에 Log File Directory를 설정
입력필드의 Aspect 속성에 logDirectoryUI를 설정
입력필드에서 사용했던 이름은 전형적인 네이밍 규약을 따르고 있지 않습니다. WebLog 클래스에서 이름만 단순히 취한 후, UI라는 첨자를 불여, 그것에 대응하는 UI를 작성하였습니다. 이로서 변수를 쉽게 기억할 수 있습니다.
그림 7-1. 완성된 캔버스
11. GUI페인터 툴로 돌아가서, 트리 목록의 메인 윈도우를 클릭(선택)합니다. 인스톨 버튼을 클릭하고, 표시된 다이얼로그 박스의 OK를 클릭합니다.
목록이 늘어났습니다.
13. 아래와 같이 편집해주십시오.
filterUI와 logDirectoryUI는 체크된 채로 둠
startWebLog는 체크를 해제
Note : startWebLog의 체크 마크(초기화를 추가의 체크 마크도 동일)를 그대로 두면, starWebLog에 이미 쓰여진 메서드는 UIDefiner에 의해 생성된 스텁 메서드에서 덧쓰여집니다. 그러고 싶진 않군요. 입력 필드의 초기화 메서드만을 기술하기 위해 실행합니다.
그림7-2. 정의 모델 다이얼로그의 startWebLog 체크 마크 해제
14. GUI페인터 툴에서 Browse 버튼을 클릭합니다.
System Browser는 WebLogGUI 클래스의 클래스 정의를 표시하고 있는 것을 확인해주십시오.
이 3행 코드는 단순하지만 많은 것을 실행하고 있습니다. 이 코드행은 VisualWorks에서 GUI 어플리케이션이 어떻게 동작하는지 이해하기 위해 매우 중요합니다. 1행 1행 코드를 확인하여, 각 행에서 실행되는 것들을 이해하시기 바랍니다.
aWebLogfilter:filterUIvalue.
Initialize 메서드는 WebLog 클래스의 인스턴스를 작성하고, aWebLog의 인스턴스 변수는, 그 인스턴스를 보유합니다. aWebLog 변수를 사용함으로서, 그 클래스 전체 속성 및 메서드와 커뮤니케이션이 가능하게 되었습니다. 실행을 통하여, GUI로부터 filterUI입력 필드의 내용과 filter 속성을 설정합니다. Value 메서드를 사용해서 입력필드의 값을 취득합니다. 왜냐하면(물론) 입력필드는 벨류 홀더이기 때문입니다.
aWebLoglogDirectory:logDirectoryUIvalue.
속성이 logDirctory라는 것만 제외하면, 하는 일은 filterUI 입력필드에서 실행한 것과 똑같습니다. 이 1행의 코드는 특정 클래스(WebLogGUI)에서 값을 얻어서 다른 클래스(WebLog)의 속성에 설정하였습니다.
aWebLogstart.
WebLog 클래스의 인스턴스를 지니고 있기에, 속성과 똑같이 그 메서드에 억세스 할 수 있습니다. WebLog의 인스턴스는 파일 필터의 설정과 로그 디렉토리 설정을 보유하고 있기 때문에, 실행할 준비는 완료되어 있습니다. start 메시지를 aWebLog 오브젝트에 송신할 뿐입니다. Workspace에서 실행할 때와 똑같습니다.
22. 코드 창에서 <오퍼레이트 클릭>후 Accept를 선택해주십시오.
23. System Browser를 닫아주십시오.
24. GUI페인터 툴 윈도우로 돌아가 트리 목록의 메인 윈도우를 클릭(선택)해주십시오. 그리고, 인스톨 버튼을 클릭해주십시오. 표시된 다이얼로그 박스에서 OK를 클릭해주십시오. 어플리케이션을 테스트합니다. 전부 동작하는지 확인해주십시오.