사용자 삽입 이미지
ClassDumper는 Giant Robot Software에서 제공하는 Objective-C로 제작된 코코아 어플리케이션의 class를 보여주는 무료 툴입니다. 애플의 다운로드 페이지 또는 해당 사이트의 ClassDumper 페이지에서 다운로드 받을 수 있습니다.

아래는 ClassDump가 실행된 모습입니다.
사용자 삽입 이미지

Open with application에서는 생성된 내용을 확인할 에디터를 선택합니다. TextEdit, Xcode, Smultron등 맥에 설치된 다양한 텍스트 에디터중 하나를 선택할 수 있습니다.

Result for architecture에서는 Mach-O 실행파일의 멀티아키텍쳐중 하나를 선택합니다. 결과가 다를 경우가 많지 않기 때문에 선택을 하지 않아도 됩니다.

그리고 그외 옵션을 선택한 후에 원하는 어플리케이션의 아이콘을 드래그 해서 독에 실행된 ClassDumper에 드랍하면 [어플리케이션 이름].h 파일이 위에서 지정된 텍스트 에디터에서 오픈됩니다.

아래는 많이 쓰는 FTP 클라이언트인 Cyberduck을 ClassDump를 이용해 생성한 헤더파일(Cyberduck.h)의 앞부분 일부의 모습입니다.

/*
 *     Generated by class-dump 3.1.2.
 *
 *     class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2007 by Steve Nygard.
 */

struct CGFunction;

struct _CTGradientElement {
    float _field1;
    float _field2;
    float _field3;
    float _field4;
    float _field5;
    struct _CTGradientElement *_field6;
};

struct _NSPoint {
    float _field1;
    float _field2;
};

struct _NSRect {
    struct _NSPoint _field1;
    struct _NSSize _field2;
};

struct _NSSize {
    float width;
    float height;
};

struct _NSZone;

/*
 * File: /Applications/Cyberduck.app/Contents/MacOS/Cyberduck
 * Arch: Intel 80x86 (i386)
 */

@protocol NSCoding
- (void)encodeWithCoder:(id)fp8;
- (id)initWithCoder:(id)fp8;
@end

@protocol NSCopying
- (id)copyWithZone:(struct _NSZone *)fp8;
@end

@interface CDListView : NSTableView
{
    BOOL mBrowserWasDoubleClicked;
    int mBrowserEditingColumn;
    int mBrowserEditingRow;
    NSMutableString *select_string;
    NSTimer *select_timer;
    BOOL quickLookAvailable;
}

+ (id)_typeAheadSelectionColumn;
+ (id)_localSelectionColumn;
- (void)awakeFromNib;
- (BOOL)acceptsFirstMouse:(id)fp8;
- (void)dealloc;
- (void)handleBrowserClick:(id)fp8;
- (void)handleBrowserClickOffloaded:(id)fp8;
- (void)handleBrowserDoubleClick:(id)fp8;
- (void)cancelOperation:(id)fp8;
- (void)textDidEndEditing:(id)fp8;
- (id)menuForEvent:(id)fp8;
- (struct _NSRect)previewPanel:(id)fp8 frameForURL:(id)fp12;
- (void)keyDown:(id)fp8;
- (void)selectRow;
- (void)selectRowWithTimer:(id)fp8;
- (void)clearSelectString:(id)fp8;
- (id)dragImageForRows:(id)fp8 event:(id)fp12 dragImageOffset:(struct _NSPoint *)fp16;
- (id)dragImageForRowsWithIndexes:(id)fp8 tableColumns:(id)fp12 event:(id)fp16 offset:(struct _NSPoint *)fp20;

@end

structure와 class의 선언된 모습이 위와 같이 출력되었습니다. 바이너리에 저장되지 않은 메소드의 인자는 원래 이름이 아니라 fp8, fp12, fp16등 스택의 위치로만 표현되는 것 같습니다. Cyberduck의 결과물은 291라인이지만 mail 같은 큰 어플리케이션은 13,240 라인으로 매우 깁니다.

애플의 소프트웨어 같이 잘 만들어진 소프트웨어들의 구조나 클래스 디자인, 명명규칙등을 알아 볼 수 있는 재밌고 유용한 툴입니다.
AND

사용자 삽입 이미지
이번 포스팅에서는 인터페이스 빌더 3.1을 둘러 보겠습니다. 역시나 이전 Xcode 둘러보기와 같이 두서없고 깊이 없이 둘러만 보겠습니다.



1. XIB 파일
처음 Xcoe3.1을 실행하고 당황스러운 부분은 더블클릭해서 인터페이스 빌더를 실행해야 할 nib 파일이 없어졌다는 것입니다.

사용자 삽입 이미지
그대신 Resources 그룹을 보면 MainMenu.xib가 새로 추가되어 있습니다. 이 MainMenu.xib를 더블클릭 하면 이전과 같이 인터페이스 빌더가 실행됩니다.


아래는 텍스트 에디터에서 열어본 *.xib 파일의 내용입니다.

사용자 삽입 이미지

요즘 많은 툴들에서 사용하는 XML 포맷으로 되어 있지만, 애플에서는 절대 직접 수정하지 말라고 권하고 있습니다. xib 파일은 기본 3,305 라인이기 때문에 그다지 수정할 생각은 들지 않습니다. xib 파일은 아마 윈도우의 rc 파일의 역활을 하는 것 같습니다.

nib 파일은 Xcode에서는 찾을 수 없지만(하위 호환을 위해서 NIB Files 그룹이 존재 하는 것 같습니다) 빌드 후에는 패키지내에 포함됩니다.


2. XIB 윈도우
2.5 버젼과는 달리 Instance, Classes, Images, Sounds, Nib등의 탭이 없어지고, 이전의 Instance에 해당되는 부분만 있습니다. Application과 Font Manager가 추가되었습니다.

사용자 삽입 이미지

3. 라이브러리 윈도우

이전의 팔레트가 라이브러리 윈도우로 변경되었습니다. 이제 UI 컨트롤, 인스턴스를 추가하는 작업에 라이브러리 윈도우를 사용합니다. 이전과 같이 NIB 윈도우에서 Classes 탭을 이용하여 subclass를 추가할 수는 없는 것 같습니다. 하지만 인스턴스를 클래스(파일)로 만드는 것은 여전히 가능합니다. 아래가 라이브러리 윈도우 입니다.

사용자 삽입 이미지

Cocoa 어플리케이션에서 사용하는 오브젝트와 컨트롤들은 Cocoa 그룹 하단에 다시 세부로 분류되어 잘 정리 되어 있습니다. 지금은 용도를 알수 없는 아이템들이 많고 이전과 비교하여 추가된 부분이 많기 되었기 때문에 기회가 되면 따로 각 아이템의 용도를 공부한 후에 설명해야 될 것 같습니다.

사용자 삽입 이미지
아직 각 아이템들의 명칭을 잘 몰라서 라이브러리 윈도우에서 우클릭을 하면 나오는 보기 옵션에서 'View Icons And Lables'를 선택하여 이름도 같이 볼 수 있도록 선택해 놓았습니다.


4. AppController 인스턴스 생성
우선 AppController 인스턴스와 클래스 파일을 만들어 보겠습니다. 라이브러리 윈도우에서 Cocoa/Objecrts & Controllers(/Controllers) 에서 Object 아이템을 드래그해서 아래와 같이 xib 도큐멘트 윈도우로 가져다 놓습니다.
사용자 삽입 이미지
새로 만들어진 Object가 선택된 상태에서 Shift+Command+i를 클릭하여 인스펙트 윈도우를 오픈합니다. 아래와 같이 Identity 항목을 선택한 다음 Class에 AppController를 입력합니다. 그리고 Action과 Outlet 하단의 [+] 버튼을 클릭하여 아래와 같이 changeTextLabel과 textLabel, userInput을 각각 추가하였습니다.

사용자 삽입 이미지


5. Outlet, Action 연결
라이브러리 윈도우에서 Label, TextField, Push Button을 윈도우로 드래그 해서 아래와 같이 배치하였습니다.
사용자 삽입 이미지
연결은 오브젝트를 컨트롤 키와 함께 클릭하여 연결될 오브젝트로 드래그 하는 이전과 동일한 방법도 가능합니다. 이전과 다른 점은 인스펙터의 연결창이 오픈되는 것이 아니라 아래와 같이 연결될 Action 또는 Outlet의 목록만 출력됩니다.
사용자 삽입 이미지 사용자 삽입 이미지

인터페이스 빌더 3에서는 더욱 편리한 방법이 있습니다. xib 도큐먼트 윈도우에서 AppController에 마우스 우클릭을 하면 아래와 같이 연결 판넬이 오픈됩니다.

사용자 삽입 이미지

textLabel의 우측에 원모양의 아이콘을 드래그 하여 Label에 연결합니다. 동일한 방법으로 userInput을 텍스트필드에 연결하고 Received Action의 changeTextLabel을 Set 버튼에 연결합니다.
  
사용자 삽입 이미지

모두 연결된 모습입니다. 해당 항목 앞의 x 아이콘을 클릭하면 연결이 삭제됩니다.
사용자 삽입 이미지

인스펙트 윈도우의 연결 항목에서도 현재 상태를 확인할 수 있습니다. 또한 이곳에서도 해당 아이템 우측의 원모양 아이콘을 드래그하여 해당 오브젝트와 연결 또는 x를 클릭하여 삭제 할 수 있습니다.
사용자 삽입 이미지


6. 소스코드와 연결
1) 클래스 파일 생성
이제 AppController 인스턴스의 클래스 파일을 만들어 보겠습니다. AppController 인스턴스를 선택한 상태에서 인터페이스 빌더 메뉴의 File/Write Class Files...을 클릭합니다. 아래의 창이 뜨면 Save 버튼을 클릭하여 저장합니다.
사용자 삽입 이미지
생성된 파일의 프로젝트에 포함시키기 위하여 체크를 하고 Add 버튼을 클릭합니다.
사용자 삽입 이미지
2) 슈퍼클래스 지정
Xcode에서 보면 AppController 클래스 파일을 확인할 수 있습니다. 인터페이스 빌더에서 위와 같이 생성한 클래스들은 헤더파일에서 슈퍼클래스를 지정해 주어야 합니다. 오랜지 색으로 되어 있는 부분을 NSObject로 변경하고 저장합니다.

#import <Cocoa/Cocoa.h>

@interface AppController : /* Specify a superclass (eg: NSObject or NSView) */ {
    IBOutlet NSTextField *textLabel;
    IBOutlet NSTextField *userInput;
}
- (IBAction)changeTextLabel:(id)sender;
@end

3) 코드와 동기화
이제 인스펙터에서 다시 확인하면 아래의 붉은색 사각형 부분과 같이 AppController.h라 바가 생겨 Xcode의 AppController 클래스와 연결되어 있음을 알려줍니다.

사용자 삽입 이미지

이전에는 소스코드에 변경사항이 생기면 Xcode에서 해당 클래스의 헤더파일을 드래그 하여 인터페이스 빌더의 nib 도큐먼트로 드랍 해서 변경사항을 적용시켜 주어야 했습니다. 하지만 이제는 Xcode에서 소스코드에 변경사항이 생기고 저장이 되면 인터페이스 빌더에 바로 반영이 되어 매우 편리합니다.

Xcode에서 미리 클래스 파일을 만들어 놓고 인터페이스 빌더에서 해당 클래스를 선택하는 것도 가능합니다.
사용자 삽입 이미지


AppContorller의 인스펙터에서 새롭게 Outlet을 추가해 보았습니다.
사용자 삽입 이미지

위와 같이 AppController.h의 상단에 MainMenu.xib 바 밑에 추가되기 때문에, 헤더파일에 반영이 되지 않은 것을 쉽게 확인할 수 있습니다. 소스코드에서 아래와 같이 myOutlet1을 추가한 후에 저장해 보았습니다.

#import <Cocoa/Cocoa.h>

@interface AppController : NSObject {
    IBOutlet NSTextField *textLabel;
    IBOutlet NSTextField *userInput;
    IBOutlet NSTextField *myOutlet1;
}
- (IBAction)changeTextLabel:(id)sender;
@end

사용자 삽입 이미지
다시 인터페이스 빌더의 AppController의 인스펙터에서 확인하면 좌측과 같이 변경된 사항이 자동으로 반영되어 있습니다.




7. 기타
1) Effect
눈에 뛰는 것은 인스펙터에 'Effect' 항목이 추가되었다는 것입니다. 코어에니메이션을 이용하여 사용자 UI에 화려한 효과를 주는 것으로 보입니다. 아래는 효과를 선택하는 화면이며,  보시는 바와 같이 다양한 효과가 있습니다. 재미있는 것이 많을 것 같은데 몇가지만 확인해 보았습니다.

사용자 삽입 이미지

코어에니메이션을 사용하기 위해서는 Content View를 체크해야 합니다. Context Filters에서 Color Invert와 Gaussian Blur 필터를 추가해 보았습니다.

사용자 삽입 이미지

* Color Invert + Gaussian Blur 필터 적용
사용자 삽입 이미지

* Color Invert 필터 적용
사용자 삽입 이미지

2) 크기조절과 정렬
사용자 삽입 이미지
윈도우 확대시에 컨트롤들의 위치와 크기를 조절하는 부분을 움직이는 gif로 만들어 보았습니다. (실제로는 훨씬 부드럽습니다)

하얀색으로 된 부분이 윈도우고 붉은색이 해당 콘트롤입니다. 윈도우 확대시 변화되는 모습을 시각적으로 보여 줍니다.


사용자 삽입 이미지
정렬 기능이 인스펙터에 추가되었습니다. Alignment 항목은 다른 오브젝트와 같이 선택되었을 때 적용이 가능합니다.

Placement는 가로 또는 세로로 정중앙에 위치하게 합니다.



Xcode와 마찬가지로 인터페이스 빌더 3.1에도 재미있고 신기한 기능들이 많이 추가 된 것 같습니다. 잠시 사용해 본 것이라 틀린 내용들이 있을 수 있습니다. 알려 주시면 수정하겠습니다.

이전 인터페이스 빌더를 보면 독특한 방식은 인상 깊었지만 무엇인지 약간 부족한 느낌을 받았습니다. 하지만 이번 3.1버젼은 비록 짧은 시간 일부분만 확인해 보았지만, 안정적이고 완성도가 많이 높아졌다는 느낌을 받았습니다.

'Xcode 3' 카테고리의 다른 글

OS X 어플리케이션 개발을 위한 Ruby - MacRuby  (3) 2008.10.23
Cocoa-Ruby 어플리케이션  (6) 2008.08.20
Xcode 3 둘러보기(3) - 기타  (6) 2008.08.14
Xcode 3 둘러보기(1) - Xcode  (10) 2008.07.29
Xcode 3 다운로드 및 설치  (2) 2008.07.29
AND

Xcode 3.1을 제가 사용해 보면서 눈에 뛰는 점들만 알아 보겠습니다. 사용 경험이 없어 틀린 내용이나 중요하지만 언급하지 않은 내용들이 많이 있을 수 있습니다. 틀린 내용들은 알려 주시면 수정하겠습니다.

제목 그대로 깊이 없고 두서 없는 '둘러보기'식 내용이니, 정확하고 체계적인 내용은 애플에서 제공하는 아래의 문서들을 확인해 보시기 바랍니다.



1. 인트로(Welcome) 화면
Xcode 시작시에 인트로 화면이 추가되었습니다. 보통 어플리케이션 사용시에 이런 Welcome이나 오늘의 팁 같은 기능들은 잘 사용하지 않습니다. 하지만 Xcode에서는 RSS로 새로운 소식들도 보여주고, 순간 관심이 가는 링크들을 클릭해서 내용도 읽어 보기 위해서 하단의 'Show at launch'를 체크해 놓고 시작할 때 마다 한번씩 새로운 소식들을 확인해 볼 수 있습니다. 화면은 아래와 같이 다섯개의 색션으로 되어 있습니다.
012345

1) Getting Started
  • Create your first Cocoa application
  • Build your user interface
  • Store your application data
  • Optimize your application

위와 같이 4개의 내용으로 구성되어 있으며 각 제목을 클릭하면 해당 도움말이 열립니다. Xcode 3을 처음 실행하는 분들은 한번씩 읽어 볼만한 내용들입니다. Xcode는 소개화면에서 다섯개의 색션중 최종적으로 선택한 색션을 기억하고 있습니다. 'Getting Started'는 한번정도 볼만한 내용이므로 RSS 색션을 선택해 놓고 종료하면 다시 실행될 때 RSS 색션으로 열립니다.

2) iPhone Dev Center
아이폰 개발과 관련된 Video, Sample Code, Reference Library에 대한 링크로 구성되어 있습니다. 클릭하면 ADC의 해당 문서가 웹브라우져에서 열립니다. 모바일에서의 개발이 맥에서 개발보다 앞에 위치 있다는 것은 애플이 iPhone에 많은 기대를 가지고 있다는 것을 보여 주는 것 같습니다. 개발자도 iPhone 개발자들이 더 많은지는 잘 모르겠습니다.

3) Mac Dev Center
내용은 위와 동일하며 OS X에서 개발에 관련된 Video, Sample Code, Reference Library에 대한 링크로 구성되어 있습니다.

4) Xcode News [RSS]
맥 개발과 관련된 최신 뉴스를 확인할 수 있습니다. 하단의 Mac OS X, Mac OS X server, Core Foundation, Quicktime, Internet & Web, Games, Graphics & Imaging, Networking 링크를 클릭하면 해당 색션의 RSS를 등록할 수 있습니다. 애플에서 제공하는 개발 관련 RSS 목록은 'More RSS feeds...'를 클릭하거나 개발자 RSS Feeds 페이지에서 확인할 수 있습니다.

5) Mailling Lists
맥 개발과 관련된 메일링 리스트들입니다. 뉴스와 마찬가지로 RSS로 등록하여 확인할 수 있습니다. 애플과 관련된 전체 메일링 리스트들은 'More...'를 클릭하거나 Apple Mailing Lists 페이지에서 확인할 수 있습니다.

6) Tips
Xcode 사용에 관련된 팁들이 있습니다. 주로 Xcode 3에서 추가된 기능들에 관한 설명들이 있으며, 아쉽지만 내용이 다시 실행될 때 마다 변경되지는 않는 것 같습니다. 버젼업 때마다 변경되는 것인지 일정 기간을 두고 변경되는지도 모르겠습니다.


2. New Project
가장 먼저 New Project를 실행해 보았습니다. UI를 제외하고는 이전과 비슷해 보입니다.
사용자 삽입 이미지
iPhoneSDK를 설치하였기 때문에 템플릿중에 iPhone OS 항목이 있습니다. 이외에 MAC OS X의 Application항목에서 Cocoa-Python과 Cocoa-Ruby에 관련된 템플릿들이 많이 추가되었습니다.

사용자 삽입 이미지


3. 에디터
'TestXcode3'로 새로운 Cocoa Application 프로젝트를 생성하였습니다. 겉으로 단순히 보기에는 Xcode 2.5와 큰 차이점이 보이지 않습니다.
사용자 삽입 이미지
이 프로젝트에서는 텍스트 필드에 입력 받은 내용을 버튼을 클릭하면 라벨에 출력하는 간단한 어플리케이션을 만들어 볼려고 합니다. 먼저 AppController 클래스를 생성하였습니다.

1) 자동완성/제안 기능 향상
사용자 삽입 이미지
IB까지 입력하면 IBAction과 같이 출력 됩니다. 여기서 엔터를 입력하면 자동으로 IBAction이 입력됩니다. IBO까지 입력하면 좌측과 같이 IBOutlet이 출력되며 이상태에서 엔터를 입력하면 IBOutlet으로 완성됩니다. 프레임워크 와 사용자가 정의한 변수, 함수, 상수등의 모든 입력에서 적용됩니다.

사용자 삽입 이미지
메소드에서도 인자의 정보를 알 수 있어 편리합니다. 얼마 사용하지 않았지만 일반적으로 팝업을 뛰우는 방식과 비교해서 매우 빠르고 편리한 것 같습니다.
 
2) 블럭
* Focus ribbon

사용자 삽입 이미지
또 하나 재미있는 기능은 구역별로 범위를 확인하거나 감출 수 있다는 것입니다. 이런 기능을 가진 툴들은 보았지만 시각적인 효과에 있어서는  Xcode가 가장 인상적인 것 같습니다.

새로 추가된 좌측의 회색 바(Focus ribbon)를 보면 내부로 구역이 중첩될 수록 진하게 표시됩니다. 저 범위에 마우스를 가져가면 범위를 확인하거나 출력되는 삼각형 모양의 아이콘을 클릭하여 해당 범위를 감출 수 있습니다.


* Code folding
사용자 삽입 이미지
가장 바깥쪽의 @implementation 구역에 마우스 커서를 가져가면 좌측과 같이 해당 구역만 하이라이트되어서 보여집니다.

상하로 삼각형 모양의 아이콘이 범위의 시작과 끝을 알려 줍니다. 이 아이콘을 클릭하면 아래와 같이 @implementsion 내의 내용이 생략되어 보여집니다.






사용자 삽입 이미지
[''']가 구역내의 내용이 생략되었다는 표시입니다. 좌측의 삼각형을 클릭하면 다시 위와 같이 펼쳐집니다.

아래의 이미지들을 확대해서 위의 이미지와 비교해서 보시면 이 기능과 화면효과에 대해서 짐작이 가실 것입니다.
사용자 삽입 이미지 사용자 삽입 이미지 사용자 삽입 이미지

사용자 삽입 이미지
또하나 입력시에 (), [], {}가 끝나는 부분에서 대응되는 시작위치를 알려 주는 기능이 좀 더 시각적으로 변경되었습니다.

4) Message bubbles
이제 빌드를 해보겠습니다. 아래가 빌드 후에 결과 화면입니다.

사용자 삽입 이미지

오류와 경고 메시지가 아주 이쁜(?) 모양으로 강조되어 출력됩니다. 첫번째 오류는 k++ 다음에 ';'를 생략해서이고, 그 아래의 경고는 헤더 파일에서 setLabelText의 선언을 구현과 다르게 해놓았기 때문에 출력되었습니다. 물론 이전과 같이 별도의 결과창도 존재합니다.

5) 스냅샷
스냅샷은 소스내의 변경사항을 간편하게 저장하고 복구할 수 있는 간편한 방법입니다. 소스를 변경하고 Control+Command+s 또는 메뉴에서 File/Make Snapshot을 클릭하면 현재의 상태가 저장됩니다.

#import <Cocoa/Cocoa.h>

@interface AppController : NSObject {
    IBOutlet NSTextField *inputText;
}

@end

AppController.h에서 위의 상태에서 스냅샷을 설정하고 다시 "- (IBAction)setLabelText:(id)sender;" 선언을 추가한 후에 다시 스냅샷을 설정합니다. 이제 File메뉴 밑의 Snapshot을 실행합니다.
사용자 삽입 이미지
위와 같이 처음 설정한 곳과 다음 설정한 곳의 차이점을 diff와 같이 보여 줍니다. 툴바의 'Restore' 버튼을 클릭하면 이전 상태로 복구됩니다. 이와 같이 CVS나 SVN을 사용하지 않는 혼자서 진행하는 간단한 프로젝트에 사용하거나 저장소와 병행하여 간편하게 사용할 수 있습니다.

6) 리펙토링
클래스나 변수, 함수의 이름을 변경하고 슈퍼클래스를 생성하고 메소드를 상위 클래스 또는 하위 클래스로 이동하는 작업을 편리하게 관리할 수 있습니다. 변경된 사항은 관련된 소스와 파일에 자동으로 반영됩니다.

사용방법은 변경할 아이템을 선택한 후에 Shift + command + j 또는 메뉴의 Edit에서 Refactor...를 선택하면 실행됩니다. 

* Rename
AppController 클래스의 이름을 변경해 보겠습니다. 선택사항을 확인한 후에 입력창에 변경될 이름을 입력합니다. Snapshot에 체크를 하면 변경된 내역이 스냅샷에 저장이 됩니다. 저는 아래와 같이 'MyAppController'로 입력하였습니다. 변경될 이름을 입력했으면 [Preview] 버튼을 클릭합니다.
사용자 삽입 이미지
하단에 변경될 파일들과 항목의 수를 알려 줍니다.
사용자 삽입 이미지
파일의 클릭하면 해당 파일에서 변경될 내역들을 이전 내용과 비교하여 확인할 수 있습니다. 이상이 없으면 Apply 버튼을 클릭하여 적용합니다.
사용자 삽입 이미지
Xcode에서 파일이름이 'MyAppController.*'로 변경되고 각 소스에 해당 내용이 변경되었음을 확인할 수 있습니다.

사용자 삽입 이미지

* Extract
선택된 내용을 새로 메소드나 함수를 생성하여 추가하여 줍니다. 'abc = newValue;'에 적용하면 아래와 같이 소스 코드가 변경됩니다. (사용방법은 Rename과 거의 유사하기 때문에 생략합니다)

변경전
- (void) setAbc: (int) newValue {
  abc = newValue;
}

 Extract 적용 후
- (void) extracted_method: (int) newValue  {
  abc = newValue;

}
- (void) setAbc: (int) newValue {
  [self extracted_method: newValue];
}

* Encapsulate
클래스 맴버 변수의 setter/getter를 자동으로 생성하여 줍니다. 'int abc;'로 멤버변수를 만들고 Encapsulate를 실행하면 헤더파일과 소스파일에 아래의 내용이 자동으로 추가됩니다.

*.h
- (int) abc;
- (void) setAbc: (int) newValue;

*.m
- (int) abc {
  return abc;
}

- (void) setAbc: (int) newValue {
  abc = newValue;
}

* Create Superclass
해당 클래스의 슈퍼클래스를 생성합니다.

* Move Up
선택된 변수와 메소드를 상위 클래스로 이동합니다.

* Move Down
선택된 변수와 메소드를 하위 클래스로 이동합니다.

* Modernize Loop
아래와 같이 반복문에 적용하면 Objective-C 2.0에 추가된 문법으로 변경하여 줍니다.
while ((item = [enumerator nextObject]) != nil) => while (item in itemArray)

Xcode 3에서 코딩은 아직 해보지 못했지만 몇 번 실행은 시켜 보았습니다. 인터페이스 빌더만 조금 변경된 것 같고 Xcode는 Objective-C 2.0외에는 그다지 변경된 내용이 없는 줄 았았습니다. 하지만 잠시 사용해 보았지만 구석구석 편리한 기능들이 많이 추가되고 개선된 것 같습니다. 다른 개발툴에도 있는 기능들이지만 사용하기 편리하고 보기 좋게 잘 만들어 놓은 것 같습니다.

용어도 잘 모르겠고 제 손에 걸린 것들만 언급을 해서 내용이 매우 부실하니, 시작시에 언급한 문서들에서 확인하시기 바랍니다. 몇 달 더 사용해 보고 '둘러보기'가 아닌 제목으로 다시 한번 포스팅 해보겠습니다.
AND