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: 와 같이 ':' 를 붙여서 불러준다.
- 인스턴스 변수는 { } 안에 선언된다. (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
.
'디지털 양피지 > Objective-C' 카테고리의 다른 글
Objective-C: 클래스 더 알아보기 (0) | 2013.06.05 |
---|---|
Objective-C: Objective-C로 프로그래밍 하기(On Windows) (0) | 2013.05.04 |
Objective-C: 소개 (0) | 2013.04.26 |