Objective-C는 표준 ANSI C를 확장한 객채지향 언어이다.
* 문법에 대해서는 별도 문서 참조.
■ 확장자
.h | 헤더파일 |
.m | 소스파일(C, Objective-C를 기술 가능) |
.mm | 소스파일(Objective-C에서 c++클래스를 호출하고자 하는경우에만 사용할것) |
* 헤더 파일을 소스에 임포트 할때는 #include대신 #import를 사용할 것.
■ 클래스 선언
클래스의 interface 는 .h에 정의하고 implementation은 .m에 정의 한다.
인터페이스 정의는 @interface로 시작하며 @end로 끝난다.
■ Strong typing과 Weak typing
<Strong typing : 클래스 타입을 확실히 적어주는 것>
MyClass *myObject1; //Strong typing앞에는 *를 붙여준다
<Weak typing : 확실히 모를때 클래스 타입 대신 id라고 적어준다>
id myObject2;
Strong typing 만 사용해온 개발자들은 id와 같은 불확실한 타입을 사용함으로써 많은 문제점이 생길꺼라 생각하지만
사실 이는 Objective-c 프로그래밍을 유연하게 만들어주는 장점중 하나이다.
■ 메소드 정의 방법
(-) 기호로 시작되는 메소드 타입 식별자는 인스턴트 메소드 임을 의미한다. (+)로 적으면 클래스 메소드.
메소드명 뒤의 (:)콜론은 이 메소드가 파라매터를 가진다는 것을 의미한다.
파라매터가 없는 경우 (:)콜론 이후는 생략 가능하다. (아하, API문서 읽기가 어렵더라니... 이런 뜻이었구나)
<호출 하는 예>
[myArray insertObject:anObject atIndex:0];
또한, Objective-C에서는 쓸모없는 임시 변수를 선언하지 않아도 되게끔 메소드의 리턴값을 파라메터로 직접 넘길 수 있다.
괄호 안에 괄호([ [] ])를 넣는 방법.
<예>
[[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0];
.(도트) 문법도 제공하는데, accessor methods(단순히 클래스 멤버에 억세스 하기 위해 만들어진 메소드, getter or setter)를 호출할때 사용된다.
위의 예제를 .(도트) 문법으로 표현해 보면 아래와 같아진다.
[myAppObject.theArray insertObject:[myAppObject objectToInsert] atIndex:0];
물론 .(도트) 문법은 myAppObject.theArray = aNewArray; 와 같이 사용할 수도 있다.
■ 클래스 implementation
<예>
@implementation MyClass
- (id)initWithString:(NSString *)aName
{
if (self = [super init]) {
name = [aName copy];
}
return self;
}
+ (MyClass *)createMyClassWithString: (NSString *)aName
{
return [[[self alloc] initWithString:aName] autorelease];
}
@end
■ 프로퍼티 선언
프로퍼티란 accessor methods(클래스 멤버에 접근하기 위한 메소드)를 편하게 implementation 하는 방법이다.
인터페이스안에 메소드와 같이 정의 하면 된다.
<예>
@property BOOL flag;
@property (copy) NSString *nameObject; // Copy the object during assignment.
@property (readonly) UIView *rootView; // Declare only a getter method.
위와 같이 선언하면 같은 이름으로 데이터를 꺼내올수 있고, 앞에 set을 붙인 이름으로 데이터를 세팅 가능하다.
set을 붙일때는 프로퍼티명의 첫글자는 대문자가 된다. 예: nameObject 는 setNameObject로 접근.
그리고 나서 클래스 implementation 에서 아래와 같은 선언을 하면 컴파일러에 의해 메소드가 자동 생성된다.
<예>
@synthesize flag;
@synthesize nameObject;
@synthesize rootView;
또는 붙여 쓸수도 있다.
<예>
@synthesize flag, nameObject, rootView;
결국 이런 기능을 이용함으로써 개발자는 accessor methods를 위한 불필요한 코딩을 줄일 수 있다.
■ String
위에서 언급한 바와 같이 Objective-C는 c의 확장임으로 c의 String을 그대로 사용할 수 있다.
하지만 대부분의 Objective-C 프레임워크에서는 c-style String대신 NSString이라는 독자적인 클래스를 사용한다.
이는 가변길이 문자의 사용, 유니코드 대응, printf와 같은 포멧기능 등의 많은 이점이 있으며 자주 사용하는 클래스이기 때문에
단지 "(더블 쿼테이션) 앞에 @만 붙여줌으로써 생성이 가능하다.
<예>
NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %s", 1, @"String"];
// Create an Objective-C string from a C string
NSString *fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];
■ Protocols와 Delegates
프로토콜은 다른 클래스에 의해 implement되는 인터페이스로써 그 자체는 클래스가 아니다.
프로토콜은 필수 또는 옵션 메소드를 선언 할 수 있으며,
아래와 같이 클래스의 인터페이스 선언과 매우 비슷하나 다만 슈퍼클래스를 가지지 않는다.
<예>
@protocol MyProtocol
- (void)requiredMethod;
@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;
@required
- (void)anotherRequiredMethod;
@end
- (void)requiredMethod;
@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;
@required
- (void)anotherRequiredMethod;
@end
프로토콜을 사용한다는 것은 그가 가지는 인터페이스를 준수하겠다는 선언이며,
주로 클래스간의 데이터 전달을 목적으로 하는 클래스에 사용된다.
이상이 Objective-C에 대한 간단한 소개였으며 앞으로 읽어볼 문서들중에 쉽게 접하게 될 특징들이다.
물론 이것이 전부는 아니며 자세한 내용은 The Objective-C Programming Language에 나와있다.
[출처] [Getting Started] Objective-C의 특징|작성자 mochi
'프로그래밍 > Objective C' 카테고리의 다른 글
APPLE :: XML 파싱 (0) | 2010.11.10 |
---|---|
APPLE :: IPhone On OpenCV (0) | 2010.11.03 |
APPLE :: Object-C Array (0) | 2010.11.03 |
APPLE :: Objective-C의 기본문법 (0) | 2010.11.01 |
APPLE :: Objective-C 요약정리 / iPhone SDK 기초 강좌 (0) | 2010.09.27 |
댓글 로드 중…