SqueakByExample:6.8

From 흡혈양파의 번역工房
Jump to navigation Jump to search

변경 세트와 변경 정렬자

스퀵에서 여러분이 작업할 때마다, 메서드와 클래스에에 생긴 변경 사항들은 변경 세트(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