본문 바로가기

Dev.iOS/Objective-C

[Objective-C] 1. Prefix와 메소드 선언, 호출

Chapter 1. Prefix 와 메소드 선언, 호출


Primitive type을 제외한 Type과 상수

id : 타입과 관계없이 객체(Object)를 가리킴
void의 포인터로 어떤 자료형이든 다 받아주는 자료형이다. event 발생 시 호출될 메소드들은 return value를 IBAction으로 해서 glue coding을 할 수 있도록 메소드의 시그니처를 선언해줘야 한다.
BOOL : char 와 형식은 같지만 불리언 값으로 사용된다.
nil : NIl : NULL
+ IBOutlet : 클래스 선언을 읽을 때 인터페이스 빌더에 인식시키는 키워드
+ IBAction : void 타입. 인터페이스 빌더에 인식시키기 위한 키워드


NS의 정체
Objective - C 언어는 NeXTSTEP을 뿌릴로 두고 있기 때문에 하휘 호환을 위해 NS를 접두사로 쓰고 있다. 접두사가 쓰이는 이유는 name collision 때문이다. 프레임워크에서 제공하는 메서드와 사용자가 정의한 함수가 동일한 이름이 되어 서로 충돌하는 것을 방지하기 위해서 사용한다. 자연스럽게 개발자는 NS라는 접두사를 사용해서는 안된다. ( 쓸 일도 없겠지만…)

cf> Objective-C ’s Prefix
NS : Foundation framework
UI : UIKit (iOS)
AB : Address book
CA : Core Animation
CI : Core Image

NSString
문자열의 길이를 알려주고, 다른 문자열과 비교가 가능하며 이 문자열을 정수 또는 실수로의 값 변환이 가능하다.
@로 축약해서 사용하며 @ 다음에 나오는 “” 안의 문자를 문자열로 인식하게 한다.


인다이렉션 ( indirection )
어떤 일을 직접하지 않고 다른 사람에게 부탁한다는 의미로
코드에 있는 값을 바로 사용하지 말고 그 값을 가리키는 포인터를 사용하여 접근하라. 라는 뜻으로 통용된다.

메시지를 보낸다 ( = 메소드를 호출한다)
ex> [shape draw]
shape이라는 객체(인스턴스)가 갖고 있는 draw라는 메소드를 실행하라

code>
@interface Circle : NSObject
Circle이라는 이름을 갖는 새 클래스를 위한 인터페이스가 있다.
즉, 클래스의 인터페이스를 정의하는 코드인 것이다.

code>
- (void) setFillColor : (ShapeColor) fillColor;
클래스에 인스턴스 메소드 선언하는 코드
void를 반환 ( return 값이 없음 )
메소드명이 setFillColor
ShapeColor 타입의 fillColor를 인자로 받는 메소드

code>
@implementation Circle
interface에서 정의한 메소드들을 구현한다.


Tip! interface에 정의되어 있지 않은 메서드를 implementation에서 구현할 경우, private method로 선언이 된다.
But, Objective-C에는 실제로 private method가 존재하지 않는다. 클래스 밖에서도 호출하면 호출된다.


Tip! implementation에서는 인스턴스 변수와 파라미터를 다르게 해서 사용해야 한다.
Tip! Objective - C 에서는 메소드를 호출할 때 self 라고 하는 감춰진 파라미터가 존재한다. 인스턴스 변수들은 self가 받는 객체에 전달된다.


메소드의 선언
1
2
3
4
- (void) drawGradient:(CGGradient)gradient
         fromValue:(float)start
         toValue:(float)end
         opaque:(BOOL)opaque;
cs

= (인스턴스 메소드임을 말하는 빼기기호)
(return value) (Method 1's Name) : (Parameter's Data Type) Parameter 1
                       (Method 2's Name) : (Parameter's Data TypeParameter 2
                       (Method 3's Name) : (Parameter's Data TypeParameter 3
                       (Method 4's Name) : (Parameter's Data TypeParameter 4

메시지 전달 ( 메소드 호출 )
1
2
3
4
[myView drawGradient:aquaGradient
        fromValue:0.0
        to Value:1.0
        opaque:YES];
cs

= [ (Instance's Name) (Method 1's Name) : (Parameter 1)
                                    (Method 2's Name) : (Parameter 2)
                                    (Method 3's Name) : (Paramter 3)
                                    (Method 4's Name) : (Parameter 4) ];