RSS

공지 사항

iOS Developer Library 번역에 대해..

아무리 영어를 잘 하는 한국인이라 할지라도, 영어를 세컨랭귀지로 쓰는 이상 영어로 작성된 문서를 한글로 된 문서보다 읽기 불편하고 오래 걸릴 수 밖에 없습니다. 그리고 개발자 문서는 계속 업데이트 되기때문에 번역본이 나오지도 않습니다. 하지만 애플의 개발자 문서를 읽다보면 배울 수 있는 것이 많습니다. 플랫폼을 개발한 애플이 직접 작성한 것이기 때문에 정확하고 명확한 정보만을 포함하기 때문입니다. 그리고 어떤 목적으로 설계하였는지의 컨셉까지 설명하고 있기때문에 개념을 잡기에 더할 나위가 없습니다. 영어로 된 문서를 읽는데 힘드신분들을 위해 조금이나마 도움이 되고자 변역을 시작하게 되었습니다. 요즘 비전공자가 개발로 많이 뛰어 드셔서 개념이 없는 상태로 개발하시는 분이 많아 졌습니다. 공식 문서를 많이 보시고 오류 없는 개발을 부탁드립니다.

애플이 설명할려는 개념을 최대한 그대로 전해드리기 위해서 대부분을 직역을 하였습니다. 하지만 너무 읽기불편할것 같은 부분은 의역하였으니 원본과 같이 읽어보신다면 틀린부분이 다수 있을 수도 있습니다. 오역이나 오타는 제보(miinyx.dev@gmail.com)해주시길 바랍니다.

퍼가실 경우 출처 표시는 매너가 아닌 의무 입니다.

 
Leave a comment

Posted by on August 13, 2011 in Notice

 

Overview: Keeping Track of Time

개요: 시간흐름 유지하기

Time 클래스는 deltaTime이라는 매우 중요한 클래스 변수를 가지고 있습니다. 이 변수는 Update 또는 FixedUpdate이 마지막에 불려진 시간(어느 함수 안에서 불려졌는지에 따라 다릅니다.)부터 현재 시간까지 얼마나 흘렀는지를 가지고 있습니다 .

그래서 이전 예제에서 frame율에 의존하지 않고 일정한 속도로 회전하기 위해 아래와 같이 수정 할 수 있습니다.

객체 움직이기:

만약 매 frame 마다 값을 더하거나 빼기 위해서는 Time.deltaTime을 곱해야합니다. Time.deltaTime을 곱한다면 당신은 근본적으로 다음과 같이 생각 할 것입니다: 나는 frame당 10미터를 가는것 보다 1초에 10미터를 가고 싶어. 이 방법은 당신의 게임이 같은 독립적인 frame율로 동작할뿐만 아니라 단위가 움직임이 쉽게 이해되기 위해 사용되기 때문에 좋습니다.

시간의 지남에 따라 빛의 범위가 증가는 예제로, 초당 2단위의 반경을 변경하기위해 다음과 같은 표현 할 수 있습니다.

 
Leave a comment

Posted by on January 2, 2012 in Notice

 

Overview: Common Operations

개요: 공통 연산자

대부분의 게임 객체 조작은 transform 과/또는 Rigidbodyd에 의해 결정 됩니다. 이것들은 transform와 rigidbody 멤버 변수를 통해 behavior scripts 안에서 각각 접근 할 수 있습니다. 만일 객체를 매 frame 마다 Y-축으로 5도 회전시키고 싶다면 다음과 같이 작성 할수 있습니다.

객체를 이동시키고 싶다면 아래와 같이 작성하십시오.

 

 
Leave a comment

Posted by on January 2, 2012 in Scripting Overview 번역

 

Scripting Overview

Scripting 개요

이 문서는 Unity 안에서 어떻게 Scripting 할 것인지를 간단히 설명한 것입니다.

Unity에서의 Scripting은 게임 객체에 행동을 부여하는 객체에 custom script 붙이기로 구성 되어있습니다. script 객체 안에서의 다른 함수들은 분명한 이벤트에 의해 불려집니다. 대부분은 아래와 같은 것을 따름니다.

  • Update:

이 함수는 frame을 랜더링 하기 전에 불려집니다. 여기에는 물리 코드를 제외한 대부분의 게임 행동 코드들이 옴니다.

 

  • FixedUpdate:

 

이 함수는 일정한 물리적인 시간 마다 불려집니다. 여기에는 물리기반의 게임 행동들이 놓여지게 됩니다.

  • Code Outside any function:

어떤 함수에도 속해있지 않는 코드들은 객체가 로드 될때 실행됩니다. script의 상태를 초기화 하는데 사용 할 수 있습니다.

이 문서는 당신이 Javascript 사용한다고 가정합니다. 하지만 C#이나 Boo script를 어떻게 사용하기 위해서는 C#과 Boo로 scripts 사용하기를 보십시오.

또한 event handler를 정의 할 수 있습니다. 이 함수들의 이름은 모두 On으로 시작합니다(예, OnCollisionEnter). 이미 정의되어있는 event의 목록을 보실려면 MonoBehaviour을 보십시오.

목록

  • Common Operations
  • Keeping Track of Time
  • Accessing Other Components
  • Accessing Other Game Objects
  • Vectors
  • Member Variables & Global Variables
  • Instantiate
  • Coroutines & Yield
  • Writing Scripts in C# & Boo
  • The most Important classes
  • Performance Optimization
  • script compilation (Advanced)
  • Unity and Mono compatibillity
 
Leave a comment

Posted by on January 2, 2012 in Scripting Overview 번역, Unity3D

 

C# / Keyword / as

as 키워드는 객체를 다른 Type으로 변환하여 줍니다.

TypeA varA = (TypeA) varB 문법과 비슷지만,

호환이 되지 않는 Type 이라면 null을 리턴합니다.

 foreach(object obj in strings) { 
 string str = obj as string; 
 if(str != null) { 
 UnityEngine.Debug.Log("String : " + str); 
 } 
 } 
 
Leave a comment

Posted by on January 2, 2012 in C#

 

c# / Keyword / is

키워드 is는 객체의 Type을 비교합니다.

같은 Type이거나 같은 “Kind” Type이라면 true를 리턴합니다.

이 키워드는 일반적으로 호환성을 확인 하기 위해 형변환 전에 사용합니다.

null 에 is 키워드를 사용한다면 항상 false를 리턴합니다.

System.IO.StreamReader reader = new StreamReader("readme.txt"); 
bool b = reader is System.IO.TextReader; 
// b is now set to true, because StreamReader inherits TextReader
 
Leave a comment

Posted by on January 2, 2012 in C#

 

MySQL and Objective-C for iPhone and OSX

MySQL and Objective-C for iPhone and OSX

웹과 연동하여 사용하는 어플리케이션이 많아지면서 MySQL에 접근하는 방법에 대해 물어보시는 분들이 많은데요. 애플에서 공식적으로 접근하는 방법을 제공해주고 있지 않기 때문에 제공해주는 API만으로 웹디비에 접근 할 수가 없습니다. 웹디비에 접근하는 방법은 크게 두 가지가 있습니다.

첫번째 방법은 http를 사용하여 페이지을 요청하면 페이지가 디비를 읽어 xml이나 JSON과 같은 파일로 작성해 보내줍니다. 그 받은 파일을 아이폰에서 받아 다시 파싱해서 사용하는 방법이죠. 이 방법이 일반적이고 애플이 권장하고 있는 방법이기도 합니다. 하지만 디비를 읽어 파싱해야하기 때문에 웹에 대해서 전혀 모르시는 분은 접근하기가 어려울 수도 있습니다.

두 번째 방법은 MySQL에서 제공해주는 라이브러리를 넣어 접근하는 방식입니다. C언어로 작성되어있기 때문에 C를 그대로 사용 할 수 있는 아이폰에서 사용이 가능합니다. 하지만 만들어져 있는 라이브러리가 있음에도 불구하고 Xcode에 넣지 않았다는 말은 사용을 권장하지 않는다는 말이 됨으로 리젝이 될지 안 될지는 사용성에 따라 틀릴 수 있을 것입니다.

이번에 소개 할 방법은 두 번째 방법입니다. 먼저 MySQL에 접근 할 수 있는 Library는 MySQL 공식 홈페이지에서 다운 받으실 수 있습니다. C로 작성되어 있기 때문에 C를 사용하지 않고 바로 Objective-C를 배우셨다면 사용하시기가 다소 어려울 것입니다. 그래서 이 Library를 Objective-C언어로 사용 할 수 있게 만들어 놓은게 오픈 소스로써 많이 올라 오는데요. 그 중 한 가지를 소개하겠습니다.

Developer Site : http://www.karlkraft.com/

Download : Objc_Mysql_iPhine_OSX_2.0.zip file (About 11MB)

MySQL Connector Using Objective-C Tutorial

1. 일단 웹에 디비가 있어야 겠죠? 테스트용으로 하나 만들어 보겠습니다.

제 디비는 이렇게 만들었습니다.

  • Server Host : http://www.queseras.com
  • Server Port : 3306 (임의로 바꾸지 않았다면 기본으로 3306포트로 지정되어있습니다.)
  • User : quesera1_miinyx
  • password : pass00 (설명하기 쉽게 하기 위해 임시로 정한 비밀번호입니다.)
  • schema : quesera1_miinyx
  • Table name : tbl_test
  • Field names : index, name, pass
  • 아래와 같은 내용이 들어 있습니다.

2. 빈 프로젝트를 만들어 위에서 다운 받은 폴더를 추가 합니다.

3. 디비에 접속 할 수 있는 소스가 추가 되었습니다. 디비 접속 정보를 넣기 위해 MySQLServer.m을 찾습니다.

4. 서버 접속할때 사용할 정보를 자신에 맞게 바꿔줍니다.

여러 서버에 접근하길 원한다면 이 파일을 살짝 수정하여 초기화 함수 부를 때 값을 지정하여 여러개의 MysqlServer 인스턴스를 만들어 놓으면 될 것 같네요.

5. 자! 이제 다 되었습니다. 아주 간단하게 MySQL에 접근할 수 있습니다.

– Performing Selects

결과 :

– Performing Inserts

결과 :

– Performing Deletes

결과 :

– Performing Updates

결과 :

팁! 작성하다 보니 하다보면 쿼리 만드는곳에서 정확하게 만들어지지 않아 에러가 종종 나곤하는데요.. field이름이나 table이름등에 ” ` 기호”로 감싸 주시면 에러를 줄일 수 있습니다. (예, index -> `index`, tbl_test -> `tbl_test`)

소스도 복잡하지 않아서 살짝 수정해서 사용하면 유용한 소스가 될것 같습니다. GOOD LUCK!

 
1 Comment

Posted by on August 25, 2011 in Other Libraries

 

Tags: , , , , , , , , , , , , ,

Objective-C 배우기 : 입문서

Objective-C 배우기 : 입문서

Objective-C는 세련된 객체지향 프로그래밍이 가능하게 설계된 컴퓨터 프로그래밍 언어입니다. Objective-C는 클래스와 함수 선언, 클래스의 동적 확장을 위한 문법을 제공하기 위해서 standard ANSI C 언어를 확장한 것입니다.

중요 : 이 문서는 C언어의 어떤 측면을 가르키기 위한 것이 아닙니다. C언어가 친숙하지 않으시다면, C의 기본부터 공부해야합니다. 또한 객체지향 프로그래밍의 기본적인 개념부터 공부하셔야 합니다. 객체의 사용과 객체지향 디자인 패턴은 코코아 어플리케이션의 디자인을 토대로합니다. 그리고 이것이 어떻게 상호작용하는지 이해하는 것은 어플리케이션을 만드는것과 매우 관련 깊습니다. 이 개념의 개요를 더 보고 싶으시다면, 객체지향 프로그래밍과 Objective-C을 읽보십시오. 그리고 코코아에 사용되는 디자인 패턴을 위해서 코코아 기초 가이드를 읽어보십시오.

C언어와 친숙하거나 객체지향으로 프로그래밍을 해본 경헙이 있다면, 아래 내용은 Objective-C의 기본 문법을 익히는데 도움을 줄것입니다. 캡슐화, 상속, 다형성과 같은 전통적인 객체지향 개념의 많은 부분이 Objective-C에서 사용됩니다. 다른점이 조금 있긴 하지만, 이 글에서 다른점들을 볼 수 있고 더 자세한 내용도 찾아 보실 수 있을 것입니다.

Objective-C의 자세한 내용과 문법을 위해서, Objective-C 프로그래밍 언어를 읽어 보시기 바랍니다.

내용:

—————————————————————————————————————————————————-

Objective-C : C의 상위 집합

Objective-C는 C언어 ANSI버전의 상위 집합이고 C의 기본문법을 지원합니다. C코드와 마찬가지로, 구현한 코드에서 공개시키기 위한 선언부를 분리 시키기 위해 헤더파일과 소스파일을 정의 할 수 있습니다. Objective-C의 헤더파일은 Table 1-1 과 같은 확장자를 사용합니다.

Table 1-1. Objective-C의 확장자

확장자 소스 타입
.h 헤더 파일. 헤더 파일은 클래스, 타입, 함수, 상수 선언들을 포함합니다.
.m 소스 파일. Objective-C와 C의 소스 코드를 포함하는 파일의 전형적으로 쓰이는 확장자 입니다.
.mm 소스 파일. 이 확장자로 된 소스 파일은 Objective-C와 C를 포함하여 C++코드를 포함합니다. C++코드를 참조를 하거나 Objective-C으로 부터 다른 특징을 가진다면 이 확장자를 사용하셔야합니다.

당신의 소스코드에 헤더파일을 포함하고 싶다면, 전형적으로 #import를 바로 사용합니다. 이것은 같은 파일을 한번이상 포함 하지 않게 확인해주는 기능 이외에 #include와 같습니다. Objective-C 샘플 코드와 문서 그리고 당신의 코드 또한 #import를 사용 할 것입니다.

—————————————————————————————————————————————————-

클래스

대부분의 다른 객체지향 언어와 같이, Objective-C의 클래스는 데이터와 그 데이터를 운영하기 위한 행동들을 캡슐화하기 위한 기본 구조 제공합니다. 객체는 클래스의 실행 중 생성되는(런타임) 인스턴스이고 메모리상에서 클래스에 의해 선언된 변수들과 메소드으로의 포인터들의 복사본을 가집니다.

Objective-C에서 클래스 명세는 명백한 두 부분(구현부와 선언부)으로 구성되어집니다. 선언부에서는 클래스 선언, 인스턴스 변수, 클래스와 관련된 메소드들을 포함합니다. 선언부는 주로 .h파일에 작성합니다. 구현부에서는 클래스의 메소드를 위한 실직적 코드를 포함합니다. 구현부는 주로 .m파일에 작성합니다.

Figure 1-1은 코코아의 기본 클래스인 NSObject의 상속을 받은 MyClass라는 클래스를 정의하는 문법을 보여줍니다. 클래스 정의는 컴파일러에게 알려주기위해 @interface로 시작해서 @end로 끝납니다. 콜론(:)으로 분리되어있는 다음 클래스 이름은 부모 클래스의 이름입니다. 클래스의 인스턴스 변수는 중괄호( { 와 } )로 감싸서 작성합니다. 다음엔 메소드에 의해 선언된 메소드들의 리스트가 있습니다. 모든 인스턴스 변수와 메소드 선언끝에는 세미콘론(;)으로 표시합니다.

Figure 1-1 클래스 선언

알림 : 클래스는 프로퍼티를 선언 할 수 있지만, 이 선언부는 메소드만 선언되어 있습니다. 프로퍼티에 대한 더 많은 정보를 위해서는 프로퍼티 선언을 읽어 보시길 바랍니다.

Objective-C는 객체를 포함하는 변수를 위해 강한 타이핑(strong typing)과 약한 타이핑(weak typing)을 모두 지원합니다. 강한 타입 변수는 변수 타입 선언에서 클래스 이름을 가집니다. 약한 타입 변수는 클래스 이름 대신에 id라는 이름을 사용합니다. 약한 타입 변수는 주로 정확한 타입을 알수 없는 객체를 가진 콜랙션과 같은 것들을 위해 사용됩니다. 강한 타입을 사용하는 언어를 사용해왔다면, 약한 타입 변수를 사용하는것은 문제를 만들 수 있다는 것을 고려하셔야 합니다. 그러나 실직적으로 약한 변수 타입의 사용은 Objective-C의 동적 프로그래밍에서 엄청난 유동성을 제공합니다.

아래 예제는 강한 타입과 약한 타입 변수 선언을 보여줍니다.

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

첫 번째 선언에 있는 *을 주의하세요. Objective-C에서의 객체 참조는 포인터입니다. 이 내용이 확실히 이해가 가지 않더라도 걱정 안 하셔도 됩니다. Objective-C로 프로그래밍 하기 위해서는 포인터를 전문가처럼 사용할 필요는 없습니다. 강한 타입 변수를 선언하기 위해서는 변수 이름 앞에 *을 써야한다는 것만 잊지 마세요. id 타입은 포인터를 나타냅니다.
—————————————————————————————————————————————————-

메소드와 메세징

Objective-C에서 메소드는 두 가지의 타입(instance method와 class method)으로 선언할 수 있습니다. 인스턴스 메소드는 클래스의 특정 인스턴스에 의해 실행됩니다. 다시 말하면, 인스턴스 메소드를 부르기전에는 먼저 클래스의 인스턴스를 만들어야합니다. 반면에 클래스 메소드는 인스턴스를 만들 필요가 없습니다. 나중에 더 상세히 다룰 것입니다.

함수의 선언은 메소드 타입 식별자, 리턴 타입, 하나 이상의 시그네처 키워드(메소드의 이름이라 생각하시면 됩니다.), 파라미터 타입과 이름으로 구성되어 있습니다. Figure 1-2는 insertObject:atIndex:인스턴스 메소드의 선언을 보여줍니다.

Figure 1-2. 메소드 선언 문법

method declaration syntax

마이너스(-)로 시작하는 이 선언 인스턴스 메소드임을 지시합니다. 이 메소드의 이름(insertObject:atIndex:)은 시그네처 키워드와 콜론(:)을 붙여서 부름니다. 콜론(:)은 파라미터가 있다는 것을 명시합니다. 메소드에 파라미터가 없다면, 콜론을 빼고 시그네처 키워드만을 써야합니다. 이 예제에서는 파라미터가 두개 있다는 것을 의미합니다.

객체에게 메세지를 보냄으로써 메소드를 호출 할 수 있습니다. 메세지는 메소가 필요한 파라미터를 가진 시그네처 키워드입니다. 객체에 보내진 모든 메세지는 동적으로 보내져서 Objective-C 클래스의 다형성을 가능하게 해줍니다.

메세지는 대괄호( [ 와 ] )로 감싸집니다. 대괄호 안에서 메세지를 받는 객체는 왼쪽에 메세지(메세지가 필요한 파라미터와 함께)는 오른쪽에 적습니다. 예를 들어 myArray 변수 안에 있는 객체에게 insertObject:atIndex:메세지를 보내기 위해서는 아래와 같은 문법을 사용합니다.

[myArray insertObject:anObject atIndex:0];

결과를 임시로 저장하기 위해서 선언하는 수많은 지역변수를 줄이기 위해서, Objective-C는 메세지를 중첩해서 사용 할 수 있게 해줍니다. 끼워 넣어진 메소드의 리턴값은 파미터로 사용되거나 다른 메세지의 타겟으로 사용됩니다. 예를 들어, 위 예제에서 당신은 어떤 변수를 다른 메세지의 결과 값으로 대체하고 싶다고 생각합니다. 만일 어떤 배열과 배열에 넣을 객체에 접근 할 수 있는 메소드를 가지고있는 myAppObject라는 객체를 있다면, 아래와 같이 작성할 수 있습니다.

[[myAppObject theArray] insertObject:[myAppObject ObjectToInsert] atIndex:0];

또한 Objective-C는 접근자 메소드를 부르기위해 점(.) 문법을 제공합니다. 접근자 메소드는 변수의 상태를 얻거(get)나 지정(set)할 수 있습니다. 일반적으로 -(type)propertyName-(void)setPropertyName:(type)과 같은 형식을 취합니다. 점(.) 문법을 사용하여 위 예제를 아래와 같이 바꿀 수 있습니다.

[myAppObject.theArray insertObject:[myAppObject ObjectToInsert] atIndex:0];

또한 대입을 위해 점(.) 문법을 사용할 수 있습니다.

myAppObject.theArray = aNewArray;

이 것은 단순히 [myAppObject setTheArray:aNewArray];의 다른 모양일뿐입니다.

앞의 예제는 클래스의 인스턴스에 메세지를 보내는것이지만, 클래스 자체에도 메세지를 보낼 수 있습니다. 클래스에게 메세지를 보내기 위해서는 명세된 메소드는 인스턴스 메소드(-) 대신에 클래스 메소드(+)로 정의 되어 있어야 합니다.

일반적으로 클래스 메소드는 인스턴스를 생성하기위한 메소드(factory method)로 사용하거나 클래스와 관련된 정보에 접근하기 위해 사용됩니다. 클래스 메소드를 선언하기 위한 문법은 메소드 타입 식별자를 마이너스(-)대신 플러스(+)를 사용하는 것 이외에는 동일합니다.

다음 예제는 클래스 메소드를 인스턴스를 생성하기위한 메소드로써 어떻게 사용되는지를 보여줍니다. 여기서 array는 NSArray의 클래스 메소드 입니다. 이 메소드는 NSMutableArray에 상속되었고, 새로운 인스턴스를 생성하고 초기화 합니다.



NSMutableArray *myArray = nil;  // nil은 근본적으로 NULL과 같습니다.// 새로운 배열을 만들어서 myArray라는 변수에 대입합니다.
myArray = [NSMutableArray array];

Listing 1-1은 이전 예제로 부터 myClass의 구현부를 보여줍니다. 클래스를 선언 하는것과 마찬가지로 @implementation@end를 사용하여 컴파일러에게 알려줍니다. 이 지시어들은 컴파일러가 해당 클래스에 선언된 메소드의 정보를 찾기위해 제공됩니다. 클래스의 정의는 선언부안에 있는 해당 메소드를 매칭시킵니다.

Listing 1-1 클래스 구현

@implementation MyClass– (id)initWithString:(NSString *)aName

{

self = [super init];

if (self) {

name = [aName copy];

}

return self;

}

+ (MyClass *)createMyClassWithString: (NSString *)aName

{

return [[[self alloc] initWithString:aName] autorelease];

}

@end

—————————————————————————————————————————————————-

프로퍼티 선언

프로퍼티 선언은 접근자 메소드의 선언과 구현을 위한 편리한 표현법입니다.

프로퍼티 선언은 클래스의 선언부에 넣어야합니다. 기본 정의는 @property를 사용해 컴파일러에게 알려줍니다. 이어서 타입과 프로퍼티 이름을 적어줍니다. 또한 접근자 메소드가 어떻게 행동하는지를 정의하기위해 옵션을 사용하여 프로퍼티를 설정할 수 있습니다. 아래 예제는 프로퍼티를 선언하기 위한 간단한 예제를 보여줍니다.

@property BOOL flag;@property (copy) NSString *nameObject; // 대입할때 객체를 복사합니다.

@property (readonly) UIView *rootView; // 게터 메소드(getter method)만 선언 합니다.

읽을 수 있는(readable) 프로퍼티는 프로퍼티의 이름(propertyName)과 똑같은 메소드를 명세합니다. 쓸 수 있는(writable) 프로퍼티는 추가로 프로퍼티의 이름의 첫자를 대문자로 바꾼 setPropertyName:메소드를 명세합니다. (역자주 : 여기서 명세(specify)한다는 말은 선언만 한 것이지 구현이 된것은 아님을 뜻합니다.) 

클래스의 구현부에서 @synthesize를 사용해 컴파일러에게 선언부에서의 명세에 따른 메소드 생성을 요청할 수 있습니다.

@synthesize flag; @synthesize nameObject;

@synthesize rootView;

원한다면 @synthesize 문장을 한줄로 합칠 수도 있습니다.

@synthesize flag, nameObject, rootView;

실제로 프로퍼티는 작성해야할 많은 코드를 줄려줍니다. 대부분의 접근자 메소드가 이와 같은 방법으로 구현되기 때문에, 클래스에서 노출되는 프로퍼티의 게터와 세터 메소드를 구현해야하는 많은 노력을 줄여줍니다. 프로퍼티 선언과 신더사이즈를 사용하여 컴파일 시간에 원하는 행동들을 명세할 수 있습니다.

당신에게 맞는 프로퍼티 선언에 대해 더 많은 정보를 얻고 싶다면, Objective-C 프로그래밍 언어 안에 있는 “프로퍼티 선언”을 읽어보시기 바랍니다.

—————————————————————————————————————————————————-

문자열

Objective-C는 C의 상위 집합이기 때문에, 문자열을 명세하기위해서 C 와 같은 관습을 제공합니다. 따라서, 문자 하나는 따옴표( ‘ 와 ‘ )로, 문자열은 쌍따옴표( ” 와 ” )로 감쌉니다. 그러나 Objective-C 프레임워크에서는 일반적으로 C-스타일의 문자열을 사용하는것 대신에 NSString 객체를 주고 받습니다.

NSString 클래스는 유동적인 길이를 가진 문자열의 저장을 위해 자체 메모리 관리, 유니코드 지원, printf-스타일 형식 기능와 같은 필요한 장점을 모두 가진 문자열을 위한 객체를 제공합니다. 일반적으로 문자열은 전역에서 많이 사용되기 때문에, Objective-C는 상수값을 가진 NSString 객체를 만들기위해서 간단한 표기법을 제공합니다. 아래 예제와 같이, 일반적으로 사용하는 쌍따옴표 문자열 앞에 @ 기호를 같이 써주시면 됩니다.

NSString *myString = @”My String\n”;
NSString *anotherString = [NSString stringWithFormat:@”%d %@”, 1, @”String”];
// C문자열로 Objective-C 문자열을 만듭니다.
NSString *fromCString = [NSString stringWithCString:”A C string” encoding:NSASCIIStringEncoding];

—————————————————————————————————————————————————-

프로토콜

프로토콜은 어떤 클래스에 의해 구현될 수 있는 메소드를 선언합니다. 프로토콜은 그들 스스로 클래스가 아닙니다. 그들은 간단히 다른 객체가 구현하여 응답할 수 있는 인터페이스를 정의합니다. 클래스 중 한군데서 프로토콜의 메소드를 구현 할 때, 클래스는 그 프로토콜을 따라야한다고 말합니다.

프로토콜은 주로 델리게이트 객체를 위한 인터페이스 명세를 위해 사용됩니다. 프로토콜과 델리게이트, 따른 객체간은 상호작용을 보는 가장 좋은 방법은 예제를 보는 것입니다.

UIApplication 클래스는 어플리케이션의 요청된 행동을 구현합니다. 어플리케이션의 현재 상태에 대한 간단한 알림을 얻기위해 UIApplication을 서브클래싱 하는것 대신에, UIApplication은 지정된 델리게이트 객체의 명세된 메소드들을 호출함으로써 알림들을 배달합니다. UIApplicationDelegate 프로토콜의 메소드를 구현한 객체는 알림을 받을 수 있고, 적절한 응답을 제공해 줄 수 있습니다. 클래스 이름 뒤에 “<>”안에 프로토콜의 이름을 써넣음으로써 상속한 클래스가 프로토콜을 따르거나 채택한다는 것을 명세합니다.

@interface MyClass : NSObject <UIApplicationDelegate, AnotherProtocol>{
}
@end

프로토콜의 선언은 부모 클래스를 가지고 있지 않다는 것과 인스턴스 변수를 정의하지 않는다는것을 제외하면 클래스 선언와 유사하게 보입니다. 아래 예제는 하나의 메소드를 선언한 간단한 프로토콜의 선언을 보여줍니다.

@protocol MyProtocol
– (void)myProtocolMethod;
@end

많은 델리게이트 프로토콜의 경우에는, 프로토콜을 채택하는 것은 단순히 그 프로토콜에 의해 정의된 메소드를 구현한다는 것입니다. 당신이 프로토콜을 지원하다는 것을 명백하게 언급하도록 요구하는 프로토콜이 있습니다. 그리고 프로토콜은 필수와 선택 메소드를 명세할 수 있습니다. 하지만, 더 낫은 개발을 위해서는 Objective-C 프로그래밍 언어안의 “프로토콜”을 읽음으로써, 프로토콜과 그들이 어떻게 사용되는지에 대해서 배우는데 약간 더 많은 시간을 보내셔야합니다.
—————————————————————————————————————————————————-

더 배우기

지금까지의 글은 단지 Objective-C언어의 기본에 친근해지기 위해 쓰여졌습니다. 여기서 다룬 내용은 이 문서의 전체에서 마주칠 수 있는 거의 대부분의 언어의 특징을 반영합니다. 이 글은 언어의 특징들 뿐만 아니라 Objective-C 프로그래밍 언어 안에 있는 내용을 읽어 볼 수 있게 도와주는 역활을 합니다.

—————————————————————————————————————————————————-

원문 : Learning Objective-C

 
Leave a comment

Posted by on August 17, 2011 in iOS Developer Library 번역

 

Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,