3장 클래스, 객체, 메서드


클래스를 만들기 위해서는 @interface의 클래스, 메소드 선언 부분과 @implementation 부분의 메서드를 구현하는 구현부분으로 나누어진다.


#import <Foundation/Foundation>


@interface Fraction: NSObject

- (void) print;

- (void) setNumrator: (int) n;

- (void) setDecominator: (int) d;

@end


3.1 # import

#include와 #import 모두 다른 파일의 내용을 포함 시키기 위하여 사용된다.

차이점은 #import 는 좀 더 똑똑해서 같은 파일을 다시 로드하지 않는다는 것이다.

C나 C++에서 사용하던 #pragma once, #ifndef __HEADERFILE 등과 유사한 기능을 포함하고 있다.

Obejctive-C에서는 #import를 사용하도록 한다.


3.2 @interface

- 메서드 앞에 '-' 는 인스턴스 메서드를 나타낸다. (C++의 public 메서드와 같다.)

- 메서드 앞에 '+' 는 클래스 메서드를 나타낸다. (C++의 static 메서드와 같다.)

- 전달 받을 파라메터가 없을 경우 print 메서드 처럼 아무것도 써주지 않는다.

- 메서드에 파라메터가 있을 경우 ':'를 사용하여 컴파일러에게 알려준다.

- 메서드를 부를때도 인수가 없을 경우 print라 부르고 있을 경우는 setNumerator: 와 같이 ':' 를 붙여서 불러준다.


3.3 @implementation
@implementation Fraction {
int numerator;           // 멤버변수 선언부 (인스턴스 변수)
int denominator;
}
- (void) print{
NSLog(@"%i/%i, numerator, denominator);
}

- (void) setNumerator: (int) n {
numerator = n;
}

@end


- 인스턴스 변수는 { } 안에 선언된다. (C++의 protected와 같다)


3.4 Main

int main ( int argc, char * argv[] )

{

@autoreleasepool{

Fraction * myFraction;


myFraction = [Fraction alloc];

myFraction = [myFraction init];


[myFraction setNumerator:1];

[myFraction setDenominator:3];


NSLog(@"The value of myFraction is:");

[myFraction print];

}

return 0;

}

- alloc으로 객체에 메모리를 할당한다. 

- init으로 객체를 초기화 한다. 

- init은 초기화된 객체를 반환하고 이를 다시 저장한다.

반드시 객체를 생성한 후 초기화 해주어야 한다. 다음과 같이 쓸수 있다.

 myFraction = [[Fraction alloc] init];

- alloc 과 init을 결합하여 new를 사용할 수도 있다.

- 메서드를 호출 할 때는 '[]'를 사용하여 메세지를 전달한다.

- [myFraction setNumerator:1] 은 myFraction 객체에 setNumerator: 메세지를 전달한다.


3.5 인스턴스 변수 접근과 데이터 캡슐화

- 인스턴스 메서드는 언제나 자신의 인스턴스 변수에 접근할 수 있다.

- 그러나, 클래스 메서드는 인스턴스 변수에 접근할 수 없다.

- 인스턴스 변수 값을 직접 설정하거나 받아오는 것은 불가능 하고 게터(getter)와 세터(setter)를 만들어 사용해야 한다.

-(int) numerator{

return numerator;

}


- (int) denominator{

return denominator;

}


- (void) setNumerator: (int) n {

numerator = n;

}


- (void) setDenominator: (int) d {

denominator = d;

}

- getter는 인스턴스 변수명을 그대로 사용한다.

- setter는 set을 붙이고 대문자로 시작하여 사용한다.


4장 데이터 형과 표현식

- 기본 형은 C 에서와 같이 int(정수형), float(부동소수점형), double(부동소수점형), char(문자형) 이 있다.

- C에서 사용 방식과 같다.


4.1 id 형

- 어느 형이나 저장할 수 있는 일반 객체 형이다.

- C의 void* 와 비슷한 형태이다.


4.2 nil, Nil, NULL, (void*)0

- Objective-C에서는 4가지 모두 NULL 즉, 아무것도 아닌 값(0으로 표시되지만 존재하지 않는 것을 의미)으로 사용된다.

- Defile을 찾아보면 차이는 없지만 아래와 같이 주석이 써있는 것을 볼 수 있다. 

  (단지 가독성을 높이기위해 구분해서 사용 할 뿐이다.)

#define Nil __DARWIN_NULL   /* id of Nil class */
#define nil __DARWIN_NULL   /* id of Nil instance */
#define NULL __DARWIN_NULL
#define __DARWIN_NULL ((void *)0)


  • Nil is used as a non-existant class: Class someClass = Nil.
  • nil is used as a non-existant instance: id someInstance = nil.
  • NULL is a pointer to a non-existant memory part: char *theString = NULL.



Posted by 빨간 양말