반응형
클래스는 State와 Behavior를 선언한다.
State (Data)는 인스턴스 변수들을 통해서 관리된다.
Behavior는 함수를 통해 구현된다.
인스턴스 변수들은 일반적으로 숨겨져 있다.(getter/setter methods를 통해서만 접근할 수 있다.)

State는 flag, count와 같이 해당 객체의 상태를 나타내는 값으로, 변수들에 의해 관리되며,
Behavior는 이러한 State를 변경, 또는 조회하기 위한 통로를 제공한다.

[객체 메세지 전달]
객체에 명령을 주려면 그 객체에 명령 메시지를 보냄으로써 가능하다. Objective-C에서 메시지는 대괄호를 사용하여 표현한다.
[receiver message]
[receiver message:argument]
[receiver message:arg1 andArg:arg2]

여기서 수신자(Receiver)는 객체이고, 메시지(Message)는 어떤 명령을 할 것인지를 말해준다.

예를 들면 아래의 메시지는 myRect라는 객체에 display라는 메서드를 실행하라는 메시지 전달 표현이다.
[myRect display];


[myRect setWidth:20.2];
이 경우 메서드 이름에 콜론(:)을 붙이고 바로 인자를 넣으면 됨. 하지만 여러개의 인자를 받도록 정의된 함수의 경우에는 그 인자를 대표하는
키워드도 함께 써줘야함.
(함수 선언)
-(void)setOriginX:(NSFloat)originx y:(NSFloat)originy;

(함수 사용)
[myRect setOriginX:20.0 y:50.0];


[예제]
//Person이라는 클래스가 있다고 가정
Person *person;

//Person의 이름을 표시하는 함수를 호출하는 메시징
[person displayName];

//Person의 나이를 가져오는 메시징
int theAge = [person age];

//Person의 나이를 바꾸는 setAge 함수 호출
[person setAge:21];

//Person의 정보를 바꾸는 setInformation 함수 호출
[person setInformation:@"김철수" age:35];

//중첩된 표현(Nested Expression)
[myRect setPrimaryColor:[otherRect primaryColor]];


점(.)을 이용하는 방법
아래는 모두 같은 의미임
float height = [person height];
float height = person.height;

[person setHeight:newHeight];
person.height = newHeight;

[[person child]setHeight:newHeight];
person.child.height = newHeight;


* 정적 유형 객체는 클래스 포인터로 선언된다.
NSArray *myarray;
* 동적 유형 객체는 id로 선언된다.
id anObject;

동적 유형 객체의 클래스는 런타임 때 결정되므로, 개발자는 클래스에 관한 지식이 없어도 코드에서 객체를 참조할 수 있다는 장점이 있다.


[클래스 정의] Objective-C에서는 클래스를 크게 두 부분으로 나누어 정의한다.
* 정의부분(.h) - interface
* 구현부분(.m) - implementation

#import 와 @class의 차이점은
import는 상위 클래스 상속을 위해
class는 import할 수 있지 않은 상속 구조상에 있을 때 참조하고자 할 때



인스턴스 변수의 범위
@interface Worker  : NSObject {
    char *name;

@private
    int age;
    char *evaluation;

@protected
    id job;
    float wage;

@public
    id boss;
}




반응형

+ Recent posts