SqueakByExample:6.8: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
mNo edit summary
(용어수정)
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
==변경세트와 변경 분류기(Change sets and the Change Sorter)==
==변경 세트와 변경 정렬자==


[[image:changeSetBrowser.png|none|553px|thumb|그림 6.33: 변경세트 브라우저(The Change Set Browser)]]
스퀵에서 여러분이 작업할 때마다, 메서드와 클래스에에 생긴 변경 사항들은 변경 세트(a change set)에 기록됩니다. 이 기록은 새로운 클래스 만들기, 클래스 이름 다시 만들기, 카테고리 변경하기, 현존하는 클래스에 메서드 추가하기 등을 포함한, 모든 중요한 작업들에 대한 내용입니다. 그렇다고해서 아무거나 쓸모없는것까지 포함되는건 아닙니다. 예를들자면, 당신이 워크스페이스에서 새로운 전역변수를 할당한다고 하죠. 변수생성은 변경세트에 추가되지 않습니다.


항상, 많은 변경 세트들이 존재합니다만, 이중 단 한 개만이 현재에 대한 변경 세트 이며, 그것은 이미지에 가해지고 있는 변경 사항들을 수집합니다. 당신은 {{Template:HighlightGray|World ▷. open...▷ simple change sorter}} 를 사용하거나 또는 "Tools" 플랩 밖으로 {{Template:HighlightGray|Change Set}} 아이콘을 드래그해서 어떤 변경 세트가 현재에 대한것인지를 확인할 수 있고, 또한 모든 변경 세트를 검사할 수도 있습니다.


스퀵에서 여러분이 작업할 때마다, 여러분이 메서드와 클래스에 가한 변경사항들은 변경세트(a change set)에 기록됩니다. 이 기록은 새로운 클래스 만들기, 클래스 이름 다시 만들기, 카테고리 변경하기 현존하는 클래스에 메서드 추가하기를 포함한, 모든 중요한 작업들에 관한 내용입니다. 그럼에도 불구하고, 임시 doits는 포함되지 않으며, 만약 포함시키려면, 예컨데, 여러분은 워크스페이스에 글로벌 변수를 할당함으로써 새로운 글로벌 변수(global variable)를 만들어야 하고, 그 변수 생성은 변경 세트 내부에 만들어지지 않을 것입니다.
그림 6.33에서 변경세트 브라우저를 확인하세요. 타이틀 바는 어떤 변경 세트가 현재에 대한 것이며, 브라우저를 열었을 때, 해당 변경 세트가 선택되었다는 것을 보여줍니다.


언제든지, 많은 변경 세트들이 존재하지만, 그것들 중의 오직 한 개만이 현재의 변경세트(ChageSet current)이며, 그것은 이미지에 가해지고 있는 변경사항들을 수집합니다. 여러분은 {{Template:HighlightGray|World ▷. open...▷ simple change sorter}} 를 사용하거나 또는 도구플랩(Tools flap) 밖으로 {{Template:HighlightGray|Change Set}} 아이콘을 드레그하여 어떤 변경세트(change set)가 현재(current)상태인지를 확인하실 수 있고 또한 모든 변경 세트를 검사할 수 있습니다.
[[image:changeSetBrowser.png|none|553px|thumb|그림 6.33: 변경 세트 브라우저]]


그림 6.33은 이 브라우저를 보여드립니다. 타이틀 바는 어떤 변경세트가 현재 것이며, 브라우저를 열었을 때, 그 변경세트가 선택되었다는 것을 보여드립니다.


다른 변경 세트들은 상단 왼쪽 패널에서 선택될 수 있으며, 노랑버튼 메뉴는 다른 변경 세트를 현재 상태로 만들 수 있게 해드리거나 새로운 변경세트를 만들 수 있게 해드립니다.상단 우측 패널은 선택된 변경세트(그것들의 카테고리들과 함께)에 의해 영향을 받을 모든 클래스들을 열거합니다.  
다른 변경 세트들은 상단 왼쪽 패널에서 선택될 수 있으며, 해당 영역에서의 노랑버튼 메뉴를 이용하면 다른 변경 세트를 현재 상태로 만들 수 있게 하거니 새로운 변경 세트를 만들 수 있게 됩니다. 상단 우측 패널은 선택된 변경 세트(그것들의 카테고리들과 함께)에 의해 영향을 받을 모든 클래스들을 열거합니다. 목록의 클래스들 중 하나를 선택하면, 그 작업은 가운데 패널에 있는 변경 세트( 클래스의 모든 메서드들이 아닌)에 있는 클래스의 메서드들의 이름을 출력하며, 중앙의 목록에서 메서드 이름을 선택하면 하단 패널에 메서드 정의를 보여줍니다. 이런정보들은 변경 세트를 나타내는 데 사용되는 객체의 구조에 저장되어 있지만, 클래스의 생성등이 변경세트의 일부인지까지는 브라우저에서 알 수 없다는걸 참고해주세요.
클래스들 중 하나를 선택하면, 그 작업은 중앙 패널에 있는 변경세트( 클래스의 모든 메서드들이 아닌)에 있는 클래스의 메서드들의 이름을 디스플레이하며, 메서드 이름을 선택하면 하단 패널에 메서드 정의를 디스플레이 합니다.




[[image:changeSorter.png|none|741px|thumb|그림 6.34: 분류기변경]]
[[image:changeSorter.png|none|741px|thumb|그림 6.34: 변경 정렬자]]


변경세트 브라우저에서는 해당항목의 노란버튼메뉴를 이용해서 변경세트의 내용에서 메서드와 클래스들을 삭제 할 수 있습니다. 하지만, 변경 세트에 대해 보다 세밀한 편집을 진행하기 위해서는, 그림 6.34 에 보이는 처럼, "Tools" 플랩 또는 메뉴에서  {{Template:HighlightGray|World ▷ open... ▷ dual change sorter}} 선택을 한 후 사용해야만 합니다.


비록, 정보가 변경세트를 나타내는 작업에 사용된 오브젝트 구조(the object structure)에 저장된다 할지라도, 브라우저는 클래스의 생성 자체가 변경 세트의 일부인지 아닌지를 보여드리지 않는 다는 것에 주목합니다. 변경세트 브라우저는 여러분이 대응하는 아이템(the corresponding items)에서 노랑 버튼 메뉴를 사용하여 변경세트로부터 클래스들과 메서드들을 지울 수 있게 해드리지만, 그럼에도 불구하고, 변경세트의 좀더 정교한 편집을 위해, 그림 6.34에 보이는 처럼, 도구 플랩에 있는 이름또는 {{Template:HighlightGray|World ▷. open▷... . dual change sorter}}를 사용하여 2차도구(second tool)인 변경 분류기(the change sorter)를 사용해야만 합니다.
듀얼 변경 정렬자<sup>Dual Change Sorter</sup>는 기본적으로 두 개의 변경 세트 브라우저를 나란히 정렬 한 모습이며, 양쪽은 각기 다른 변경 세트, 클래스 또는 메서드를 살펴볼 수 있습니다. 이 레이아웃은 그림 6.34에 보이는 처럼 듀얼 변경 정렬자의 주요 기능이며, 현재 스크린샷은 한 개의 변경 세트에서 다른 변경 세트로 변경 사항들을 이동시키거나 복사하는 기능을 진행하는 과정을 보여주고 있습니다.


변경 분류기(the change sorter)는 본질적으로 두 개의 변경 세트 브라우저를 나란히 정렬 하며 각 측면은 다른 변경세트, 클래스 또는 메서드에 집중할 수 있습니다. 이 레이아웃은 그림 6.34에 보이는 것 처럼 변경 분류기(the change sorter)의 주요 기능이며, 이는 한 개의 변경 세트에서 다른 변경 세트로 변경사항들을 이동시키거나 복사하는 기능입니다.
당신은 왜 변경 세트의 구성에 관해 관심을 가져야만 하는지 의아해 할 수도 있습니다. 이유인즉슨, 변경 세트가 스퀵에서 다른 파일 시스템으로 코드를 내보내고, 내보내진 파일 시스템에서 다른 스퀵 이미지 내부로 코드를 보내거나 또 다른 비-스퀵 스몰토크로 내보내는 작업에 필요한 단순한 메커니즘을 제공하기 때문이죠. 변경 세트 내보내기는 "filing-out" 으로 알려져 있으며, 모든 변경 세트와 브라우저에서 클래스 또는 메서드 중 하나에서 노랑 버튼 메뉴를 사용하여 사용할 수 있습니다. 파일내보내기를 반복하면 파일의 새로운 버전이 만들어기는 하지만, 변경 세트 브라우저들은 몬티첼로같은 버전을 관리하는 도구가 아닙니다: 변경 세트 브라우저들 종속성을 지속적으로 파악하지는 않거든요.


여러분은 왜 변경세트의 구성에 관해 관심을 가져야만 하는지 의아해 하실 것입니다. 그 답은 변경 세트가 스퀵에서 다른 파일 시스템으로 코드를 내보내고 그 파일 시스템에서부터 다른 스퀵 이미지 내부로 코드를 내보내거나 또 다른 비-스퀵 스몰토크로(non-Squeak Smalltalk) 내보내는 작업에 필요한 단순한 메커니즘을 제공하기 때문입니다. 변경 세트 내보내기(Change set export)는 "filing-out" 으로 알려져 있으며, 모든 변경세트와 브라우저에서 클래스 또는 메서드 중 하나에서 노랑 버튼 메뉴를 사용하여 실행될 수 있습니다. 반복되는 file outs(Repeated file outs)은 파일의 새로운 버전을 만들지만, 변경세트들은 몬티첼로와 같은 versioning 도구가 아닙니다: 이것들은 종속성(dependencies)을 계속 파악하지 않습니다.  
몬티첼로가 나타나기 전에는, 변경 세트(change sets)는 스퀵 사용자들 사이에서 코드를 교환하는 주요 수단이었습니다. 이전의 스몰토크 프로그래머들은 변경세트의 단순성(파일 내보내기로 만들어지는 파일은, 텍스트 에디터로 편집을 권해드리지 않는다해도, 그 자체로 텍스트 파일일 뿐입니다.)과 이동성을 활용하였습니다. 시스템에 직접적인 관련-몬티첼로에서 진행하기에는 준비가 덜된것들-이 없는 많은 차이점들을 변경세트로 만드는건 만드는건 쉽습니다.


몬티첼로의 출현 이전에, 변경세트(change sets)는 스퀵 사용자들 사이에서 코드를 교환하는 주요 수단이었습니다. 그들은 단순성과 [파일나가기(file out)는 비록 우리가 여러분에게 텍스트 에디터(text editor)로 편집을 권해드리지 않아도, 단지 text file입니다.] 이동성을 활용하였습니다.
변경 세트를 몬티첼로 패키지와 비교하는경우, 변경세트의 중요한 단점은, 변경세트는 종속성의 개념이 지원되지 않는다는 겁니다. 파일로 내보내진 변경 세트는 그 변경 세트를 불러오고 들어갈 모든 이미지를 변경하는 동작들의 모음입니다. 변경 세트를 성공적으로 로드하려면 이미지가 변경세트를 로딩하기 적합한 상태에 있어야 합니다. 예를 들자면, 변경 세트는 아마도 클래스에 메서드를 더하기 위한 동작을 포함하고 있겠죠. 이런 변경 작업은 오직 메서드가 추가될 대상 클래스가 이미지 내부에서 이미 존재하는 경우에만 정상적으로 수행될 수 있습니다. 이와 비슷한 경우로, 변경 세트가 클래스 이름을 다시 지었거나 재 범주화를 시킬수도 있는데, 이런 작업은 분명히 대상이 되는 클래스가 이미지 안에 현존할 때에만 수행될 것이고, 메서드들을 파일 내보내기 하는경우에도, 내보내진 메서드를 로드할때 해당되는 메서드들이 가져온 이미지 안에 존재하지 않는, 없는 클래스에 선언된 인스턴스 변수들만을 사용하게 될겁니다. 문제는 변경 세트들은 파일로 가져온(filed in) 이전 이미지의 조건들을 명백하기 가지고 있는게 아니라는 겁니다: file in과정이 아무문제없이 잘 작동되기를 바라는것 외에는 방법이 없으며, 뭔가 문제가 있을때 대부분 이해하기 힘든 에러메시지와 stack trace등의 결과가 나오게 되겠죠. file in 이 잘 진행된다고 해도 현재의 변경세트가 강제로 아무 메시지없이 조용히 다른 변경세트를 취소해버릴수도 있습니다.
시스템의 많은 다양하고 관련되지 않은 부분들- 몬티첼로가 그것들을 수행하기에는 아직 준비되지 않은 것들-에 변경사항들을 가하는 변경세트를 만드는 것은 꽤 쉽습니다.  


몬티첼로 패키지와 비교할 때, 변경 세트의 주요 결점은, 종속성(dependencies)의 개념(notion)을 지원하지 않는 것입니다. 파일 나가기(Filed-out) 변경 세트는 그 변경세트가 로드 되어 들어갈 모든 이미지를 변경하는 액션들의(actions) 세트(set)입니다. 변경세트를 성공적으로 로드하려면 이미지가 적합한 상태에 있어야 합니다. 예를 들면, 변경 세트는 아마도 클래스에 메서드를 더하기 위한 액션(action)을 포함하고 있을 것입니다. 이 작업은 오직 클래스가 이미지 내부에서 이미 정의되었을 때에만 수행될 수 있습니다. 이와 유사하게, 변경세트는 아마도 클래스 이름을 다시 지었거나 재 범주화( re-categorize)를 시켰을 것이며, 이 작업은 분명히 클래스가 이미지 안에 현존할 때에만 수행될 것이며, 메서드들은 아마도 파일 나가기(filed out)가 되었겠지만, 그 메서드들이 들여오기(imported) 되었던 그 이미지 안에 존재하지 않는, 공표된(declared) 인스턴스 변수들만을 사용할 것입니다. 문제는 변경세트들이 명백하게 그것들이 파일에 들어가기가 된(filed in) 조건들(the conditions)을 묘사하지 않는다는 것입니다: 프로세스 중인 파일이 단지 최상으로 작동될 것을 희망할 뿐이며, 무엇인가 잘못 되었을 때, 보통 난해한 에러 메시지와 스텍 자취(a strack trace)의 결과를 가져옵니다. 심지어 파일 들어가기(file in)가 잘 되어도, 하나의 변경 세트는 아마도 다른 변경 세트에 의해 변경사항을 조용히 입력취소(undo) 할 수도 있습니다.
반대로, 몬티첼로 패키지들은 패키지파일 내부에서 서술문 방식으로 코드를 표현합니다: 몬티첼로 패키지들은 내부적으로 이미지의 상태를 로드된 후의 상태가 되도록 표현해야 합니다. 이런 내부의 작업은 몬티첼로로 하여금 사용자에게 충돌에 대한 경고(두 개의 패키지들은 모순되는 최종 상태를 요구합니다)를 진행할 수 있게하며, 종속성 순서에 따라 순서대로 패키지를 로드할 수 있도록 해줍니다.
 
몬티첼로 패키지에 비해 결점이 있지만, 변경 세트들은 여전히 나름대로 쓰이는곳이 있습니다. 별도로, 살펴보기를 원하거나 아마도 사용하기를 원하는 변경 세트들을 인터넷에서 찾을 수 있습니다. 이런 이유들로 다음에는 변경 정렬자를 사용해서 변경 세트를 file out 하고, 이렇게 만들어진것들을 어떻게 file in(파일에서 가져오기) 하는지 알려드릴겁니다. 파일에서 가져오는 작업에는, 별도의 도구인, 파일 브라우저가 필요합니다.


반대로, 몬티첼로 패키지들은 서술문 방식(declarative fashion)으로 코드를 표현합니다: 그 패키지들은 이미지의 상태를 로드된 후의 상태가 되도록 묘사해야 합니다. 이 작업은 몬티첼로로 하여금 여러분에게 충돌에 대하여 [두 개의 패키지들은 모순되는 최종 진술들을(final states) 요구합니다] 경고를 허락하고, 종속성 명령(dependency order)에 일련의 패키지를 로드할 수 있도록 해드릴 것입니다.


이 결점들에도 불구하고, 변경세트들은 여전히 나름대로의 사용처들을 갖고 있습니다. 특별히, 여러분은 보기를 원하거나 아마도 사용하기를 원하는 인터넷에서 변경세트들을 찾을 수 있습니다. 그러므로 우리는 변경분류기(the change sorther)를 사용하여 변경 세트(change set)를 파일 나가기(file out) 하여, 이제 여러분에게 어떻게 파일 들어가기를(file in) 하는지 말씀드릴 것입니다. 이 작업은 다른 도구인, 파일 목록 브라우저(the file browser)를 필요로 합니다.


==Notes==
==Notes==

Latest revision as of 08:01, 7 June 2013

변경 세트와 변경 정렬자

스퀵에서 여러분이 작업할 때마다, 메서드와 클래스에에 생긴 변경 사항들은 변경 세트(a change set)에 기록됩니다. 이 기록은 새로운 클래스 만들기, 클래스 이름 다시 만들기, 카테고리 변경하기, 현존하는 클래스에 메서드 추가하기 등을 포함한, 모든 중요한 작업들에 대한 내용입니다. 그렇다고해서 아무거나 쓸모없는것까지 포함되는건 아닙니다. 예를들자면, 당신이 워크스페이스에서 새로운 전역변수를 할당한다고 하죠. 변수생성은 변경세트에 추가되지 않습니다.

항상, 많은 변경 세트들이 존재합니다만, 이중 단 한 개만이 현재에 대한 변경 세트 이며, 그것은 이미지에 가해지고 있는 변경 사항들을 수집합니다. 당신은 World ▷. open...▷ simple change sorter 를 사용하거나 또는 "Tools" 플랩 밖으로 Change Set 아이콘을 드래그해서 어떤 변경 세트가 현재에 대한것인지를 확인할 수 있고, 또한 모든 변경 세트를 검사할 수도 있습니다.

그림 6.33에서 변경세트 브라우저를 확인하세요. 타이틀 바는 어떤 변경 세트가 현재에 대한 것이며, 브라우저를 열었을 때, 해당 변경 세트가 선택되었다는 것을 보여줍니다.

그림 6.33: 변경 세트 브라우저


다른 변경 세트들은 상단 왼쪽 패널에서 선택될 수 있으며, 해당 영역에서의 노랑버튼 메뉴를 이용하면 다른 변경 세트를 현재 상태로 만들 수 있게 하거니 새로운 변경 세트를 만들 수 있게 됩니다. 상단 우측 패널은 선택된 변경 세트(그것들의 카테고리들과 함께)에 의해 영향을 받을 모든 클래스들을 열거합니다. 목록의 클래스들 중 하나를 선택하면, 그 작업은 가운데 패널에 있는 변경 세트( 클래스의 모든 메서드들이 아닌)에 있는 클래스의 메서드들의 이름을 출력하며, 중앙의 목록에서 메서드 이름을 선택하면 하단 패널에 메서드 정의를 보여줍니다. 이런정보들은 변경 세트를 나타내는 데 사용되는 객체의 구조에 저장되어 있지만, 클래스의 생성등이 변경세트의 일부인지까지는 브라우저에서 알 수 없다는걸 참고해주세요.


그림 6.34: 변경 정렬자

변경세트 브라우저에서는 해당항목의 노란버튼메뉴를 이용해서 변경세트의 내용에서 메서드와 클래스들을 삭제 할 수 있습니다. 하지만, 변경 세트에 대해 보다 세밀한 편집을 진행하기 위해서는, 그림 6.34 에 보이는 처럼, "Tools" 플랩 또는 메뉴에서 World ▷ open... ▷ dual change sorter 선택을 한 후 사용해야만 합니다.

듀얼 변경 정렬자Dual Change Sorter는 기본적으로 두 개의 변경 세트 브라우저를 나란히 정렬 한 모습이며, 양쪽은 각기 다른 변경 세트, 클래스 또는 메서드를 살펴볼 수 있습니다. 이 레이아웃은 그림 6.34에 보이는 것 처럼 듀얼 변경 정렬자의 주요 기능이며, 현재 스크린샷은 한 개의 변경 세트에서 다른 변경 세트로 변경 사항들을 이동시키거나 복사하는 기능을 진행하는 과정을 보여주고 있습니다.

당신은 왜 변경 세트의 구성에 관해 관심을 가져야만 하는지 의아해 할 수도 있습니다. 이유인즉슨, 변경 세트가 스퀵에서 다른 파일 시스템으로 코드를 내보내고, 내보내진 파일 시스템에서 다른 스퀵 이미지 내부로 코드를 보내거나 또 다른 비-스퀵 스몰토크로 내보내는 작업에 필요한 단순한 메커니즘을 제공하기 때문이죠. 변경 세트 내보내기는 "filing-out" 으로 알려져 있으며, 모든 변경 세트와 브라우저에서 클래스 또는 메서드 중 하나에서 노랑 버튼 메뉴를 사용하여 사용할 수 있습니다. 파일내보내기를 반복하면 파일의 새로운 버전이 만들어기는 하지만, 변경 세트 브라우저들은 몬티첼로같은 버전을 관리하는 도구가 아닙니다: 변경 세트 브라우저들 종속성을 지속적으로 파악하지는 않거든요.

몬티첼로가 나타나기 전에는, 변경 세트(change sets)는 스퀵 사용자들 사이에서 코드를 교환하는 주요 수단이었습니다. 이전의 스몰토크 프로그래머들은 변경세트의 단순성(파일 내보내기로 만들어지는 파일은, 텍스트 에디터로 편집을 권해드리지 않는다해도, 그 자체로 텍스트 파일일 뿐입니다.)과 이동성을 활용하였습니다. 시스템에 직접적인 관련-몬티첼로에서 진행하기에는 준비가 덜된것들-이 없는 많은 차이점들을 변경세트로 만드는건 만드는건 쉽습니다.

변경 세트를 몬티첼로 패키지와 비교하는경우, 변경세트의 중요한 단점은, 변경세트는 종속성의 개념이 지원되지 않는다는 겁니다. 파일로 내보내진 변경 세트는 그 변경 세트를 불러오고 들어갈 모든 이미지를 변경하는 동작들의 모음입니다. 변경 세트를 성공적으로 로드하려면 이미지가 변경세트를 로딩하기 적합한 상태에 있어야 합니다. 예를 들자면, 변경 세트는 아마도 클래스에 메서드를 더하기 위한 동작을 포함하고 있겠죠. 이런 변경 작업은 오직 메서드가 추가될 대상 클래스가 이미지 내부에서 이미 존재하는 경우에만 정상적으로 수행될 수 있습니다. 이와 비슷한 경우로, 변경 세트가 클래스 이름을 다시 지었거나 재 범주화를 시킬수도 있는데, 이런 작업은 분명히 대상이 되는 클래스가 이미지 안에 현존할 때에만 수행될 것이고, 메서드들을 파일 내보내기 하는경우에도, 내보내진 메서드를 로드할때 해당되는 메서드들이 가져온 이미지 안에 존재하지 않는, 없는 클래스에 선언된 인스턴스 변수들만을 사용하게 될겁니다. 문제는 변경 세트들은 파일로 가져온(filed in) 이전 이미지의 조건들을 명백하기 가지고 있는게 아니라는 겁니다: file in과정이 아무문제없이 잘 작동되기를 바라는것 외에는 방법이 없으며, 뭔가 문제가 있을때 대부분 이해하기 힘든 에러메시지와 stack trace등의 결과가 나오게 되겠죠. file in 이 잘 진행된다고 해도 현재의 변경세트가 강제로 아무 메시지없이 조용히 다른 변경세트를 취소해버릴수도 있습니다.

반대로, 몬티첼로 패키지들은 패키지파일 내부에서 서술문 방식으로 코드를 표현합니다: 몬티첼로 패키지들은 내부적으로 이미지의 상태를 로드된 후의 상태가 되도록 표현해야 합니다. 이런 내부의 작업은 몬티첼로로 하여금 사용자에게 충돌에 대한 경고(두 개의 패키지들은 모순되는 최종 상태를 요구합니다)를 진행할 수 있게하며, 종속성 순서에 따라 순서대로 패키지를 로드할 수 있도록 해줍니다.

몬티첼로 패키지에 비해 결점이 있지만, 변경 세트들은 여전히 나름대로 쓰이는곳이 있습니다. 별도로, 살펴보기를 원하거나 아마도 사용하기를 원하는 변경 세트들을 인터넷에서 찾을 수 있습니다. 이런 이유들로 다음에는 변경 정렬자를 사용해서 변경 세트를 file out 하고, 이렇게 만들어진것들을 어떻게 file in(파일에서 가져오기) 하는지 알려드릴겁니다. 파일에서 가져오는 작업에는, 별도의 도구인, 파일 브라우저가 필요합니다.


Notes