오브젝트C2010. 8. 22. 19:58
Objective-C의 기초

http://developer.apple.com/iphone/gettingstarted/docs/objectivecprimer.action

Objective-C 언어는 객체지향 Programming이 가능한 심플한 컴퓨터 언어이다. Objective-C는 표준 ANSI C를 확장하였으며 이를 통하여 클래스, 메써드, properties를 정의 하며 클래스의 동적확장을 더욱 더 증진시킨다. 클래의 문법과 설계는 Smalltalk에 기반을 하며 이는 최초의 객체지향 programming 언어이다.

객체지향 Programming을 해본적이 있다면 아래의 내용은 Object-C의 기본 문법을 배우는데 도움이 되는 정보이다. 많은 전통적인 객체지향 개념들(슐화, 상속성, 다향성과 같은) Object-C 안에서 모두 구현이 가능하다. 몇몇 중요한 차이점은 이 문서에 소개가 될것이고 더 깊은 정보들에 대해서 제공을 한다.

만약 객체지향 Programming 언어를 써본적 없다면 다음으로 넘어가기 전에 기본 개념을 이해할 필요가 있다. 객체의 사용 그리고 객체지향적인 개념은 iPhone Application을 설계하는 기본이며 어떻게 상호작용을 하는지에 대한 이해는 iPhone application을 중요하다. 객체지향개념의 개론은 Object-Oriented Programming with Objective-C을 보라. 추가적으로 Cocoa Fundamentals Guide를 보면 Cocoa에서 객체지향 디자인패턴을 사용하는 방법에 대한 정보를 얻을 수 있다.

For a more detailed introduction to the Objective-C language and syntax, see The Objective-C 2.0 Programming Language.

Object-C 언어와 문법에 대한 상세한 소개는 The Objective-C 2.0 Programming Language을 보라.

Objective-C: A Superset of C c의 확장

Objective-C는 ANSI 버젼의 c언어와 기본적인 c문법의 집합이다. C코드처럼 헤더 파일과 소스파일을 분리하여 선언부와 구현부를 분리하여 정의할 수 있다. Objecive-C에서 사용하는 파일 확장자는 표1에 나와있다.

 
표1  Objective-C code의 확장자

헤더파일. 헤더파일은 class, type, function, 상수의 정의를 포함한다.

소스 파일. 이 확장자는 Objective-C와 C 코드를 사용한 소스이다.

소스 파일. 이 확장자는 Objective-C와 C++ class를 사용할 수 있다. C++ class에 대한 접근도 가능하다.

When you want to include header files in your source code, you can use the standard #include compiler directive but Objective-C provides a better way. The #import directive is identical to #include, except that it makes sure that the same file is never included more than once. The Objective-C samples and documentation all prefer the use of #import, and your own code should too.

소스코드에 헤더 파일을 포함하고 싶다면, 표준방식 #include를 사용하여 컴파일러에 직접 지시할 수 있다 그러나 Objective-C는 더 좋은 방법을 제공한다. #import는 #include와 동일한 지시를 하지만 한번이상 동일한 파일이 포함되지 않게 만든다. Objective-C 예제와 문서에는 모두 #import를 사용하고 너의 코드에도 그렇게 해라.

Strings

C의 포함집합(superset)이라는 것은 Objective-C가 C의 규칙으로 string을 사용하는 것을 지원한다. 다른 말로, 하나의 character들은 '로 묶이고 문자열은 "으로 묶인다는 것이다. 그렇지만, 대부분의 Objective-C framework들은 C형식의 문자열 자주 사용하지 않는다. 그대신에 대부분의 framework들은 NSString 객체로 통용된다.

NSString class,는 당신이 기대하는 모든 잇점을 가지고 있으며, 저장된 임의길이의 문자열을 위한 완성된 메모리 관리를 포함하고, Unicode를 지원, printf형태의 유용한 포맷팅 그리고 더 많은 것을 가진 문자열을 싸고있는 객체이다. 때문에 비슷한 문자열은 일반적으로 사용이 되지만 Objective-C는 NSString객체를 상수로부터 생성할 수는 약식표기법을 지원한다. 이같은 약식 표기를 사용하려면 모든 문자열의 앞에 @를 붙여야 하며 다음 예제에 나온다.

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]; 

Classes

다른 모든 객체지향 언어처럼, Objective-C안의 클래스들은 일부 데이터에 대해 캡슐화를 지원 한다. 객체는 실행시기의 클래스의 instance이며, 그리고 클래스의 클래스 와 method의 포인터에 의해 선언된 instance 변수의 복사본 을 그것 자신에 포함한다.

Objective-C 클래스의 명세는 두개의 뚜렷한 구분을 필요로 하는데 그것은 interface 그리고 imlementation이다. Interface는 클래스의 정의 일부를 선언하고 클래스와 교류하는 instance 변수와 method를 정의 한다. Implementation 클래스의 실제 동작하는 코드를 가진 method 일부를 포함한다. 그림1은 MyClass라고 불리는 클래스를 선언하는 문법을 보여주는데 이 클래스는 NSObject 기본 클래스를 상속 받았다. 클래스의 정의는 항상 @interface로 시작해서 컴파일러에 지시한다. 그리고 끝은 @end로 지시한다. 그 다음 클래스 이름은(:으로 구분된) 부모클래스의 이름이다. 클래스의 instace(또는 맴버) 변수는 { }블럭안에 정의된다. 그 뒤로 클래스의 method들이 정의 된다. 세미콜론은 instance변수 와 method의 정의가 끝났음을 나타낸다.

(출처:iPhone Dev Center)

Listing 1 shows the implementation of MyClass from the preceding example. Like the class declaration, the class implementation is identified by two compiler directives—here, @implementation and @end. These directives provide the scoping information the compiler needs to associate the enclosed methods with the corresponding class. A method’s definition therefore matches its corresponding declaration in the interface, except for the inclusion of a code block.

리스트1은 앞선 예제 MyClass의 구현을 보여준다. 클래스의 선언처럼 클래스의 구현은 컴파일러에 두개의 지시자인 @implementation과 @end로 선언이 된다. 이 지시자들은 일치하는 클래스와 함께 둘러싸인 메써들과 필요한 연동을 제공한다. 메써드의 정의와 어울리는 인터페이스안의 일치하지만 그 인터페이스의 선언과 일치하는 포함된 코드블럭은 제외한다.

Listing 1  A class implementation

@implementation MyClass - (id)initWithString:(NSString *) aName { if (self = [super init]) { count count = 0; data = nil; name = [aName copy]; return self; } } + (MyClass *)createMyClassWithString: (NSString *) aName { return [[[self alloc] initWithString:aName] autorelease]; } @end

Note: Although the preceding class declaration declared only methods, classes can also declare properties. For more information on properties, see “Properties”.

When storing objects in variables, you always use a pointer type. Objective-C supports both strong and weak typing for variables containing objects. Strongly typed pointers include the class name in the variable type declaration. Weakly typed pointers use the type id for the object instead. Weakly typed pointers are used frequently for things such as collection classes, where the exact type of the objects in a collection may be unknown. If you are used to using strongly typed languages, you might think that the use of weakly typed variables would cause problems, but they actually provide tremendous flexibility and allow for much greater dynamism in Objective-C programs.

The following example shows both strongly and weakly typed variable declarations for the MyClass class:

NOTE:단지 method의 선언을 정의하기 전이라고 해도 클래스는 properties선언을 통해 할 수 있다. properties에 대한 더 많은 정보를 원한다면 "Properties"를 보라.

변수에 객체를 저장할때 당신은 항상 포인트 타입을 사용한다. Objective-C 강한형(Strongly type)과 약한형(Weekly type) 두가지를 통해 변수에 객체를 저장하는 방법을 제공한다. 강한형 포인터들은 변수형 선언안에 클래스의 이름을 포함한다. 약한형 포인터는 객체 대신에 id type을 사용한다. 약한형 포인터들은 collection 클래스를 이용할때 사용이 되는 이유는 collection 정확한 클래스의 형태를 알 수 없을때 사용이 된다. 마약 당신이 강한형 포인트를 사용하는 언어를 사용했다면, 넌 약한형이 문제를 일으킬것이라고 생각하게 된다 그러나 그것들은 크다란 융통성과 Objective-C의 큰 원동력을 허용한다.

다음 예제는 MyClass class에서 쓸 두가징형태의 변수 방법을 보여준다

MyClass* myObject1; // Strong typing id myObject2; // Weak typing 

Methods

A class in Objective-C can declare two types of methods: instance methods and class methods. An instance method is a method whose execution is scoped to a particular instance of the class. In other words, before you call an instance method, you must first create an instance of the class. Class methods, by comparison, do not require you to create an instance, but more on that later.

The declaration of a method consists of the method type identifier, a return type, one or more signature keywords, and the parameter type and name information. Figure 2 shows the declaration of the insertObject:atIndex: instance method. The declaration is preceded by a minus (-) sign, which indicates that this is an instance method. The method’s actual name (insertObject:atIndex:) is a concatenation of all of the signature keywords, including colon characters. The colon characters declare the presence of a parameter. If a method has no parameters, you omit the colon after the first (and only) signature keyword. In this example, the method takes two parameters.

 

 


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150059568493
Posted by 오늘마감

댓글을 달아 주세요