Smalltalk 사용 시간이 증가함에 따라 Workspace의 사용빈도가 줄어들며, System Browser 사용이 늘어납니다. 하지만 Smalltalk로 개발한다는 의미로 보면 대다수의 경우, 작업을 Workspace에서 진행합니다. 그리고 System Browser에 복사해서 새로운 메서드 작성에 사용합니다. 이 방법은 아주 옳은 방법입니다. 따라서, 이 레슨에서도 그렇게 할 것입니다. Workspace는 메서드에 코드를 카피하기 전에 작은 코드의 덩어리를 테스트하기 위한(동작확인) 장소입니다. 이 레슨은 그 연습을 하기 좋은 예가 될 것입니다.
이 레슨에서는 주어진 디렉토리 수만큼 복수의 로그파일을 실행할 수 있도록, Wordspace에서 코드를 복사하여(로그파일에서 페이지 카운트를 수집한 것 처럼) WebLogClass의 새로운 메서드에 붙입니다. 지금까지 많은 기초를 쌓아왔습니다.(패키지, 클래스, 프로토콜, 클래스)그러니, 이번 레슨에서는 처음보다 간결하게 설명하겠습니다.
지금 코드에는 남아도는 무언가를 찾을 수 있을지도 모릅니다.(같은 것을 하는 것 처럼 보이는 메서드) 그것들을 결합하거나, 보다 일반화(효율이 좋고 재이용 가능)가 가능하다면 멋진 코드가 될거라 생각합니다. 다음 레슨에서는 그렇게 될 것입니다.
1. System Browser를 기동시켜주십시오.(VisualWorks 메인 런쳐 화면에서 툴바의 네 번째 버튼을 클릭하거나, 브라우저>>시스템 메뉴를 선택해주십시오.)
그림 10-4. 새로운 메서드(startPageCount)가 표시된 System Browser
10. Workspace를 열고 아래 코드를 입역해주십시오.
WebLogClassnewstartPageCount
텍스트를 반전시키고 <오퍼레이트 클릭>후 실행을 선택해주십시오.
이 코드는 하나의 파일이 아닌, 디렉토리에 있는 모든 로그파일의 페이지 카운트의 통계를 취득한다는 것을 제외하면, 이전 레슨에서 했던 것처럼 동작합니다.
11. 파일 브라우저를 열고 로그파일이 있는 디렉토리를 지정합니다. 그러므로 인해 파일의 내용을 확인할 수 있습니다.
그림 10-5. 파일 브라우저에 의한 페이지 카운트와 파일 일람 표시
현실적으로는, 아직 소프트 웨어로서 구성되어 있지 않습니다. 사용자는 일반적으로 보다 많은 개선을 요구합니다. 그리고 기능사양서까지도 개발도중 혹은 종료후에 변경할 수 있도록 요구합니다. 이것은 이례적인 것이 아닙니다.
누군가가 로그파일에 기록되어있는 ASP페이지를 더욱 개발했다고 합시다. 예를들어 HTM파일이 있다고 칩시다. 그러면 어떻게 될까요? 상사는 그것을 카운트하고 싶어 할겁니다. 상사는 단 한번밖에 Hit하지 않는 페이지에는 흥미를 나타내지 않습니다. 실제로, "TOP10" 이외의 페이지에는 흥미를 가지지 않을 것입니다. 이와 같은 변경은 그것들을 위해 필요합니다.
12. 프로토콜 창 상단에 있는 Instance 탭이 선택되어있는지 확인해주십시오. private 프로토콜을 클릭(선택)하고 showPageCounts: 메서드를 클릭(선택)해주십시오. 그리고 아래와 같이 변경해주십시오.
13. 메서드 코드 뷰에서 <오퍼레이트 클릭>후 Accept를 선택해주십시오. 입력된 코드가 "재컴파일(recompile)"됩니다. 타이핑 미스가 없고, 다이얼로그 박스가 표시되지 않는다면(즉 아무일도 일어나지 않는다면), Smalltalk는 코드를 변경해서 올바르게 컴파일했다는 것을 의미합니다.
14. 작업영역을 열고 아래의 코드를 입력해주십시오.
WebLogClassnewstartPageCount
텍스트를 반전시키고 <오퍼레이트 클릭>후 실행을 선택해주십시오.
주의 : 틀림없이 에러가 발생해서 그림-16(아래)과 같은 화면이 표시됩니다.
그림 10-6. 악명 높은 notify 화면
15. 로그파일로서 같은 장소에 통계 파일을 써냅니다. 통계 파일의 일부로서 로그파일명을 사용하고 있기 때문에, 필터(ws00 파일을 찾는)는 .STAT을 포함하고 있습니다. 이것들을 읽어들였기 때문에 에러가 발생했습니다. 이 문제를 해결하기 위해, 다음 레슨에서는 파일 출력명을 다르게 하겠습니다. 하지만 지금은 .STAT 파일을 삭제하는 것으로 이 문제를 해결합니다.
디버그 화면을 닫은 후, 최초의 .STAT 파일은 "Lock"되어 있습니다. VisualWorks가 닫힐때까지 파일을 삭제할 수 없습니다. 그렇기에, 아래와 같은 과정을 진행해주십시오.}}
모든 변경점을 파일로 출력해주십시오
VisualWorks를 닫아주십시오.
.log 파일이 존재하는 모든 ".STAT"파일을 삭제해주십시오
VisualWorks를 기동해주십시오
WebLogStats.st 파일을 파일인해주십시오
16. Workspace를 열고 아래 코드를 입력해주십시오.
WebLogClassnewstartPageCount
텍스트를 반전시키고 <오퍼레이트 클릭>후 실행을 선택해주십시오.
이 코드는 한 가지 파일이 아닌, 디렉토리에 있는 모든 로그파일의 페이지 카운트 통계를 취득한다는 점을 빼고는, 앞서 레슨에서 했던 것처럼 동작합니다. "통계"파일은 "HTM"파일의 카운트를 포함하고 있습니다. 그것들을 포함해서 "TOP10" 일람을 작성합니다.
17. 파일 브라우저를 열고 로그파일이 존재하는 디렉토리를 지정해주십시오. 그러면 파일의 내용을 확인할 수 있습니다.
이 행은 매우 단순합니다.(line findString: '.asp' startingAt: 1)은 ASP 페이지를 발견하고, (line findString: '.htm' startingAt: 1)은 HTM 페이지를 발견합니다. 이 식의 돌아오는 값은 수치입니다.("ASP" 혹은 "HTM" 문자열의 개시위치) 그리고 두 개의 값을 더합니다. 다음 행은 제로보다 큰 것을 확인합니다.
이것은 고정수의 반복(1 to: 10 do:) 예입니다. 1에서 10까지의 숫자는 임시변수 each에 설정(하나씩)되어, 블록의 코드 부분에서 사용됩니다. 컬렉션이 있기 때문에, 숫자나 인덱스를 가진 컬렉션의 요소로서 파악할 수 있습니다. 컬렉션의 각 요소의 참조로서 at: 메서드를 사용합니다. (sort at: each)식은 의외로 어려운 일을 합니다.
정리
Workspace에서 클래스 라이브러리 안으로 어떻게 이행(자신의 클레스나 메서드를 작성)하는지를 학습한 의미 있는 레슨이었습니다. 분할한 부분을 때어내거나, 다시 결합하는 방법을 찾기 위해서, 무엇을 하고 있는지 이해하는 능력에만 의존합니다. 이것은 다른 기능과 같이 훈련에 의해 쉬워집니다.
경우에 따라서는 코드를 이행하는 동안 비슷한 메서드를 찾아내거나, 한 가지 메서드에 결합하기 위해 좀더 수정한다거나 하는 노력을 할 것입니다. 다음 레슨에서는 이러한 예를 바탕으로, 효율적이며 재이용 가능한 코드를 작성하기 위해 메서드끼리 연결해보겠습니다.