Objective C - 해당되는 글 24건
(루트 클래스를 새로 만들 때를 제외하면) 새 클래스를 정의 할때, 이 클래스는 어떤 프로퍼티를 상속받는다. 예를 들어, 부모의 인스턴스 변수와 메서드는 모두 암묵적으로 새 클래스 정의에 들어간다. 다시 말해서 서브클래스는 마치 자신이 이 메서드와 인스턴스 변수들을 정의한 것처럼 이것들에 직접 접근할 수 있다.

@interface ClassA: NSObject
@end

@interface ClassB: ClassA
@end

ClassB가 NSObject가 아닌 ClassA의 서브 클래스임을 나타낸다. 따라서 ClassA의 부모 클래스(혹은 수퍼 클래스)는 NSObject지만, ClassB의 부모는 ClassA다.

NSObject  ->  ClassA  ->  ClassB

루트 클래스는 수퍼 클래스가 없고, 계층도에서 맨 아래에 있는 ClassB는 서브 클래스가 없다. 따라서 ClassA는 NSObject의 서브 클래스이고, ClassB는 ClassA와 NSObject의 서브 클래스다(정확히 말하면 NSObject의 서브-서브 클래스 혹은 손자 클래스다) 또한 NSObject는 ClassB의 수퍼클래스인 ClassA의 수퍼 클래스다. 계층도를 따라 올라가면 NSObject는 ClassB의 수퍼 클래스이기도 한 것이다.

@알맞은 메서드 찾기
객체에 메시지를 보낼 때, 어떻게 올바른 메서드를 선택하고 객체에 적용하게 되는지 궁금할 것이다. 사실 그 규칙은 매우 간단하다. 먼저 객체가 속한 클래스를 보고 그 클래스에 메시지와 이름이 동일한 메서드가 명시적으로 정의되어 있는지 확인한다. 만일 정의되어 있다면, 그 메서드가 사용된다. 메서드가 정의되지 않았다면, 부모 클래스를 확인한다. 부모 클래스에서 메서드가 정의되어 있다면 그 메서드가 사용된다. 그렇지 않다면 그 위 부모 클래스에서 찾는 식으로 계속 검색해 나간다. 

'Study > Objective-C' 카테고리의 다른 글

[Objective C: 동적바인딩과 id형]  (0) 2010.07.17
[Objective C: @class 지시어]  (0) 2010.07.16
[Objective C: 상속]  (0) 2010.07.16
[Objective C: self 키워드]  (0) 2010.07.16
[Objective C: static 키워드]  (0) 2010.07.16
[Objective C: 자동 생성 접근자 메서드]  (0) 2010.07.16
Trackback 0 | Comment 0
하나의 인스턴스의 메서드 내에서 다른 메서드를 호출할 수 있다. 메서드 내에서는 인스턴스 변수를 이름으로 직접 부를 수 있다. 현재 메서드의 수신자인 객체는 self 키워드로 부르면 된다.

[Example self]

[self method]

'Study > Objective-C' 카테고리의 다른 글

[Objective C: @class 지시어]  (0) 2010.07.16
[Objective C: 상속]  (0) 2010.07.16
[Objective C: self 키워드]  (0) 2010.07.16
[Objective C: static 키워드]  (0) 2010.07.16
[Objective C: 자동 생성 접근자 메서드]  (0) 2010.07.16
[Objective C: 반복문]  (0) 2010.07.16
Trackback 0 | Comment 0
메서드 내에서 지역 변수를 선언할 때 앞에 static 키워드를 적어 두면, 메서드를 여러 번 호출하는 동안 그 값을 유지할 수 있다.

[Example static]

-(void) showPage
{
     static int pageCount =0;
     ...
     ++pageCount;
     NSLog(@"pageCount: %i", pageCount);
}
정적 변수는 프로그램을 실행하는 동안 단 한 번만 초기화 되고, 메서드가 여러 번 호출되는 동안 자신의 값을 계속 유지 한다. 정적 지역 변수는 프로그램이 시작되면 한 번 0으로 설정되고 showPage 메서드가 호출되는 동안 값을 유지한다.  pageCount를 정적 지역 변수로 만드는 것과 인스턴스 변수로 만드는 것 사이에 차이점에 유의하자. 정적 지역 변수 pageCount는 showPage 메서드를 실행시키는 모든 객체가 인쇄한 페이지 수를 센다. 후자, 즉 인스턴스 변수의 경우에는 각 객체가 자신만의 pageCount 사본이 있으므로 각 객체가 인쇄한 페이지 수를 센다. 정적 변수나 지역 변수는 자신이 정의된 메서드 내에서만 접근할 수 있다는 사실을 기럭하라. 심지어 정적 변수 pageCount도 showPage내에서만 접근할 수 있다. 만일, 변수를 선언한 부분을 메서드 선언 바깥으로(보통 구현 파일 앞부분에)옮기면 다른 메서드에서도 접근할 수 있다.

'Study > Objective-C' 카테고리의 다른 글

[Objective C: 상속]  (0) 2010.07.16
[Objective C: self 키워드]  (0) 2010.07.16
[Objective C: static 키워드]  (0) 2010.07.16
[Objective C: 자동 생성 접근자 메서드]  (0) 2010.07.16
[Objective C: 반복문]  (0) 2010.07.16
[Objective C: 기본 데이터형]  (0) 2010.07.16
Trackback 0 | Comment 0
Objective-C 2.0부터는 세터와 게터 메서드(둘을 합쳐 '접근자 메서드'라고 한다.)를 자동으로 생성할 수 있다.
첫단계는 인터페이스 부분에서 @property 지시어를 사용하여 프로퍼티를 지정해 주는 것이다. 이 프로퍼티들은 보통 인스턴스 변수라고 부른다.

[Example Interface]
@interface Fraction: NSObject
{
     int numerator;
     int denominator;
}
@property int numerator, denominator;

@end

이제 numerator, denominator, setNumerator, setDenominator 같은 게터와 세터 메서드에 대한 정의가 포함되지 않는다. 이것들은 Objective-C컴파일러가 자동으로 생성(synthesize)해 줄 것이다.

[Example implementation]

#import "Fraction.h"
@implementation Fraction

@synthesize numerator, denominator;

@end


'Study > Objective-C' 카테고리의 다른 글

[Objective C: self 키워드]  (0) 2010.07.16
[Objective C: static 키워드]  (0) 2010.07.16
[Objective C: 자동 생성 접근자 메서드]  (0) 2010.07.16
[Objective C: 반복문]  (0) 2010.07.16
[Objective C: 기본 데이터형]  (0) 2010.07.16
[Objective C: 데이터 캡슐화]  (0) 2010.07.16
Trackback 0 | Comment 0
@for
for문은 다음 순서로 실행된다.
1. 초기화 표현식이 먼저 평가된다. 이 표현식은 반복문 내에 사용되는 변수를 ( 0과 1 같은 초기값으로) 설정하는데, 보통 '인덱스' 변수라고 부른다.
2. 반복 조건이 평가된다. 만일 조건이 충족되지 못하면(즉, 표현식이 거짓이면) 반복문은 즉시 종료된다. 실행은 반복문 다음 명령문으로 넘어간다.
3. 반복문에서 몸체를 구성하는 명령문이 실행된다.
4. 반복 표현식이 평가된다. 보통 이 표현식은 인덱스 변수에 1을 더하거나 1을 뺀다.
5. 2단계로 돌아간다.

@break
반복문이 수행되고 있을때, 특정 조건에 따라 반복문을 빠져나오게 만들어야 할 때가 있다. 예를 들어, 오휴가 발생하거나 예상보다 빨리 데이터의 마지막 지점을 도달했을 때이다. 이때 break문을 사용하면 된다. break문은 프로그램이 어떤 반복문(for, while, do)을 실행하든 그에 상관없이 즉시 실행에서 빠져 나오도록 해준다.

@continue
continue문은 break문과 유사하지만, 반복문을 종료하지는 않는다. continue문이 실행되면 그 다음에 있는 모든 명령문을 건너뛰고 반복문의 맨 앞으로 되돌아 간다. 그 후 다시 반복문을 평상시와 마찬가지로 정상 실행한다. continue문은 특정 조건에 따라 반복문 내의 명령문 그룹을 건너뛰려 하지만 반복문을 종료하고 싶지는 않을 때 주로 사용한다.
Trackback 0 | Comment 0
char(형) : NSLog 문자( %c )
int(형): NSLog 문자( %i, %x, %o )
float(형): NSLog 문자( %f, %e, %g, %a)
double(형): NSLog 문자 (%f, %e, %g, %a)
id(형): NSLog 문자( %p )
Trackback 0 | Comment 0
변수는 숨겨져 있기 때문에 직접 접근할 수는 없다. 변수가 숨겨져 있다는 개념은 '데이터 캡슐화'의 핵심 요소다. 클래스 정의를 작성하는 사람은 데이터를 캡슐화해 프로그래머(클래스의 사용자)가 클래스 내부 정보를 수정할지 말지를 걱정하지 않고 클래스 정의를 확장하거나 수정하도록 해줄수 있다. 데이터를 캡슐화 함으로써 프로그래머와 클래스 개발자 사이에 적절한 분리층이 생기는 것이다. 덧붙여 말하자면, 인스턴스 변수의 값을 설정하는 메서드는 보통 '세터(setter)'라고 하고, 값을 받아오는 메서드는 '게터(getter)'라고 부른다.
Trackback 0 | Comment 0
-(void) print; 
맨앞에 있는 빼기 부호( - )는 Objective-C 컴파일러에게 이 메서드가 인스턴스 메서드라고 알려준다. 더하기 부호 ( + )는 클래스 메서드를 나타낸다. 클래스 메서드는 클래스의 새로운 인스턴스를 만드는 것과 같이 클래스 자체에 작업을 수행한다. 이는 차를 새로 생산하는 것과 비슷한데, 차는 클래스이고 새 차를 만드는 것은 클래스 메서드가 되는 것이다 .
Trackback 0 | Comment 0
프로그램은 논리적으로 세 부분으로 나뉜다. 
@interface 부분
@implementation 부분
@program 부분

@interface 부분은 클래스, 데이터 요소, 메서드를 선언 
@implementation 부분은 이 메서드들을 구현하는 실제 코드 
@program 부분은 프로그램이 달성하려는 목적을 실행하는 프로그램 코드 
Trackback 0 | Comment 0
클래스로부터 나온 것을 인스턴스라고 부르고, 이 인스턴스가 수행하는 행동을 '메서드'라고 한다. 메서드는 클래스 인스턴스나 클래스 자체에 적용된다. 객쳉 메서드를 적용하는 객체의 '상태'에 영향을 미치게 된다. 여기서 핵심은 객체가 클래스의 유일무이한 표현이고 각 객체는 보통 객체 자신만 접근 가능한(private) 정보(데이터)를 포함하다는 것이다. 메서드는 이 데이터들에 접근하고 수정하는 방법을 제공해 준다. 
[receiver message]; 
이 문법에서는 여는 대괄호( [ ) 다음에 클래스나 그 클래스의 인스턴스 이름이 나오고 그 다음 공백이 나온 후, 수행할 메서드가 나온다. 마지막으로 대괄호를 닫아 주고 ( ] ), 명령문을 끝내는 세미콜론 ( ; )을 단다. 
Trackback 0 | Comment 0

강군v's Blog is powered by Daum & tistory