Study/Objective-C - 해당되는 글 24건
@"Programminmg is fun"

Foundation Framework에서 제공하는 NSString 이라는 클래스를 이용하면 문자 스트링 객체를 다룰 수 있다. C 스타일 스트링은 char문자로 구성되어 있는 반면, NSString객체는  unichar 문자로 이루어져 있다.

Objective-C에서는 따움표로 묶인 문자 스트링 앞에 @을 붙여서 문자 스트링 상수 객체를 생성할 수 있다. 따라서 다음 다음 표현식은 문자 스트링 상수 객체를 생성한다.

NSString 클래스는 수정할 수없는 객체를 다룬다. 그런데 스트링 내 문자를 바꿔야 한다면 어떻게 할까? 스트링에서 문자 몇개를 삭제하거나 검색한 뒤 대치하는 작업을 해야 할 때가 있다. 이런 스트링은 NSMutableString에서 처리한다.




@자주 사용되는 NSString 메서드

+( id ) stringWithString: nsstring - 새 스트링을 생성하고 nsstring으로 설정한다.
- ( id ) initWithString: string - 새로 생성된 스트링을 nsstring으로 설정한다.
- (unichar) charaterAtIndex: i - 인덱스 i에 있는 유니코드 문자를 반환한다.
-(NSString *) substringWithRange: range -  지정한 범위에 속하는 스트링 일부를 반환한다.
-(NSString *)substringToIndex: i - 스트링의 앞부분에서 i번 문자 앞까지 이르는 스트링의 일부를 반환한다.
-(NSComparisonResult) caseInsensitiveCompare: nsstring - 대 소문자는 무시하고 두 스트링을 비교한다.
-(NSComparisonResult) compare: nsstring - 두 스트링을 비교한다.
-(BOOL) hasPrefix: nsstring - 스트링이 nsstring으로 시작하는지 확인한다.
-(BOOL) hasSuffix: nsstring - 스트링이 nsstring으로 시작하는지 확인한다.
-(BOOL) isEqualToString: nsstring - 두 스트링이 동일한지 확인한다.
-(NSString *) lowercaseString - 소문자로 변환된 스트링을 반환한다.
-(NSString *) uppercaseString - 대문자로 변환된 스트링을 반환한다.
저작자 표시
신고

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

[Objective C: 스트링 객체]  (0) 2010.07.18
[Objective C: 숫자 객체]  (0) 2010.07.18
[Objective C: 전처리기]  (0) 2010.07.18
[Objective C: 열거 데이터 형]  (0) 2010.07.17
[Objective C: const 키워드]  (0) 2010.07.17
[Objective C: 접근 제한자]  (0) 2010.07.17
Trackback 0 | Comment 0
@"Programminmg is fun"

Foundation Framework에서 제공하는 NSString 이라는 클래스를 이용하면 문자 스트링 객체를 다룰 수 있다. C 스타일 스트링은 char문자로 구성되어 있는 반면, NSString객체는  unichar 문자로 이루어져 있다.

Objective-C에서는 따움표로 묶인 문자 스트링 앞에 @을 붙여서 문자 스트링 상수 객체를 생성할 수 있다. 따라서 다음 다음 표현식은 문자 스트링 상수 객체를 생성한다.

NSString 클래스는 수정할 수없는 객체를 다룬다. 그런데 스트링 내 문자를 바꿔야 한다면 어떻게 할까? 스트링에서 문자 몇개를 삭제하거나 검색한 뒤 대치하는 작업을 해야 할 때가 있다. 이런 스트링은 NSMutableString에서 처리한다.




@자주 사용되는 NSString 메서드

+( id ) stringWithString: nsstring - 새 스트링을 생성하고 nsstring으로 설정한다.
- ( id ) initWithString: string - 새로 생성된 스트링을 nsstring으로 설정한다.
- (unichar) charaterAtIndex: i - 인덱스 i에 있는 유니코드 문자를 반환한다.
-(NSString *) substringWithRange: range -  지정한 범위에 속하는 스트링 일부를 반환한다.
-(NSString *)substringToIndex: i - 스트링의 앞부분에서 i번 문자 앞까지 이르는 스트링의 일부를 반환한다.
-(NSComparisonResult) caseInsensitiveCompare: nsstring - 대 소문자는 무시하고 두 스트링을 비교한다.
-(NSComparisonResult) compare: nsstring - 두 스트링을 비교한다.
-(BOOL) hasPrefix: nsstring - 스트링이 nsstring으로 시작하는지 확인한다.
-(BOOL) hasSuffix: nsstring - 스트링이 nsstring으로 시작하는지 확인한다.
-(BOOL) isEqualToString: nsstring - 두 스트링이 동일한지 확인한다.
-(NSString *) lowercaseString - 소문자로 변환된 스트링을 반환한다.
-(NSString *) uppercaseString - 대문자로 변환된 스트링을 반환한다.
저작자 표시
신고

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

[Objective C: 스트링 객체]  (0) 2010.07.18
[Objective C: 숫자 객체]  (0) 2010.07.18
[Objective C: 전처리기]  (0) 2010.07.18
[Objective C: 열거 데이터 형]  (0) 2010.07.17
[Objective C: const 키워드]  (0) 2010.07.17
[Objective C: 접근 제한자]  (0) 2010.07.17
Trackback 0 | Comment 0
@"Programminmg is fun"

Foundation Framework에서 제공하는 NSString 이라는 클래스를 이용하면 문자 스트링 객체를 다룰 수 있다. C 스타일 스트링은 char문자로 구성되어 있는 반면, NSString객체는  unichar 문자로 이루어져 있다.

Objective-C에서는 따움표로 묶인 문자 스트링 앞에 @을 붙여서 문자 스트링 상수 객체를 생성할 수 있다. 따라서 다음 다음 표현식은 문자 스트링 상수 객체를 생성한다.

NSString 클래스는 수정할 수없는 객체를 다룬다. 그런데 스트링 내 문자를 바꿔야 한다면 어떻게 할까? 스트링에서 문자 몇개를 삭제하거나 검색한 뒤 대치하는 작업을 해야 할 때가 있다. 이런 스트링은 NSMutableString에서 처리한다.




@자주 사용되는 NSString 메서드

+( id ) stringWithString: nsstring - 새 스트링을 생성하고 nsstring으로 설정한다.
- ( id ) initWithString: string - 새로 생성된 스트링을 nsstring으로 설정한다.
- (unichar) charaterAtIndex: i - 인덱스 i에 있는 유니코드 문자를 반환한다.
-(NSString *) substringWithRange: range -  지정한 범위에 속하는 스트링 일부를 반환한다.
-(NSString *)substringToIndex: i - 스트링의 앞부분에서 i번 문자 앞까지 이르는 스트링의 일부를 반환한다.
-(NSComparisonResult) caseInsensitiveCompare: nsstring - 대 소문자는 무시하고 두 스트링을 비교한다.
-(NSComparisonResult) compare: nsstring - 두 스트링을 비교한다.
-(BOOL) hasPrefix: nsstring - 스트링이 nsstring으로 시작하는지 확인한다.
-(BOOL) hasSuffix: nsstring - 스트링이 nsstring으로 시작하는지 확인한다.
-(BOOL) isEqualToString: nsstring - 두 스트링이 동일한지 확인한다.
-(NSString *) lowercaseString - 소문자로 변환된 스트링을 반환한다.
-(NSString *) uppercaseString - 대문자로 변환된 스트링을 반환한다.
저작자 표시
신고

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

[Objective C: 스트링 객체]  (0) 2010.07.18
[Objective C: 숫자 객체]  (0) 2010.07.18
[Objective C: 전처리기]  (0) 2010.07.18
[Objective C: 열거 데이터 형]  (0) 2010.07.17
[Objective C: const 키워드]  (0) 2010.07.17
[Objective C: 접근 제한자]  (0) 2010.07.17
Trackback 0 | Comment 0
지금까지 다룬 정수, 부동 소수점 수, long 같은 모든 숫자 형은  Objective-C 언어의 기본 데이터 형이었다. 다시 말해, 이것들은 객체가 아니었다. 그러므로 이것에 메시지 같은 것을 보내는 일은 불가능하다. 그런데 이런 형 값을 객체로 다뤄야 할 때가 있다. 이를 위해 Foundation Framework에서 NSNumber 클래스를 제공한다.




@NSNumber 생성과 값을 받는 메서드

 생성 및 초기화 클래스 메서드  초기화 인스턴스 메서드  값을 받는 인스턴스 메서드
 numberWithChar  initWithChar  charValue
 numberWithInt  initWithInt  intValue
 numberWithLong  initWithLong  longValue
 numberWithFloat  initWithFloat  floatValue
 numberWithDouble  initWithDouble  doubleValue
 numberWithBool  initWithBool  boolValue
저작자 표시
신고

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

[Objective C: 스트링 객체]  (0) 2010.07.18
[Objective C: 숫자 객체]  (0) 2010.07.18
[Objective C: 전처리기]  (0) 2010.07.18
[Objective C: 열거 데이터 형]  (0) 2010.07.17
[Objective C: const 키워드]  (0) 2010.07.17
[Objective C: 접근 제한자]  (0) 2010.07.17
Trackback 0 | Comment 0
지금까지 다룬 정수, 부동 소수점 수, long 같은 모든 숫자 형은  Objective-C 언어의 기본 데이터 형이었다. 다시 말해, 이것들은 객체가 아니었다. 그러므로 이것에 메시지 같은 것을 보내는 일은 불가능하다. 그런데 이런 형 값을 객체로 다뤄야 할 때가 있다. 이를 위해 Foundation Framework에서 NSNumber 클래스를 제공한다.




@NSNumber 생성과 값을 받는 메서드

 생성 및 초기화 클래스 메서드  초기화 인스턴스 메서드  값을 받는 인스턴스 메서드
 numberWithChar  initWithChar  charValue
 numberWithInt  initWithInt  intValue
 numberWithLong  initWithLong  longValue
 numberWithFloat  initWithFloat  floatValue
 numberWithDouble  initWithDouble  doubleValue
 numberWithBool  initWithBool  boolValue
저작자 표시
신고

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

[Objective C: 스트링 객체]  (0) 2010.07.18
[Objective C: 숫자 객체]  (0) 2010.07.18
[Objective C: 전처리기]  (0) 2010.07.18
[Objective C: 열거 데이터 형]  (0) 2010.07.17
[Objective C: const 키워드]  (0) 2010.07.17
[Objective C: 접근 제한자]  (0) 2010.07.17
Trackback 0 | Comment 0
전처리기는 프로그램을 개발하고, 읽고, 수정하고, 다른시스템으로 포팅 작업을 좀더 쉽게 해준다. 전처리기는 Objective-C 컴파일 과정에서 프로그램 코드에 산재한 특별한 명령문을 인식한다. 그 이름이 암시하듯, 전처리기는 이 명령문들을 Objective-C 프로그램을 분석하기 전에 처리한다. 전처리 명령문을 만들기 위해서는 샵 기호( # )를 줄의 맨 앞에 붙여야 한다. 

#define 명령문
#define문의 주 용도는 프로그램 상수에 심벌 명을 부여하는 것이다. 다음 전처리 명령문은 TRUE라는 이름이 값 1과 동일하다고 정의한다. 

#define TRUE 1 


#import 명령문 
자신만의 매크로 세트를 개발하여 각 프로그램에서 사용할 것이다. 이 매크로들은 각 프로그램에 입력하는 대신, 전처리기는 다른 파일에 있는 정의를 각각 #import 문을 사용하여 프로그램에 포함시킨다. 이 파일들은 (앞에서 사용했지만 직접 만들지 않았던 것들과 유사하게) 보통 .h로 끝나고 '헤더' 혹은 '인클루드' 파일이라고 부른다.  
저작자 표시
신고

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

[Objective C: 스트링 객체]  (0) 2010.07.18
[Objective C: 숫자 객체]  (0) 2010.07.18
[Objective C: 전처리기]  (0) 2010.07.18
[Objective C: 열거 데이터 형]  (0) 2010.07.17
[Objective C: const 키워드]  (0) 2010.07.17
[Objective C: 접근 제한자]  (0) 2010.07.17
Trackback 1 | Comment 0
Objective-C에서는 변수에 할당 가능한 값의 범위를 지정할 수 있다. 열거 데이터형은 키워드 enum을 붙여서 정의한다.

enum boolean { no = 0, false = 0, yes = 1, true = 1};

만일 enum boolean  변수 값으로 no나 false를 할당하면 변수 값을 0으로 설정해 주는 셈이다. 반면 yes나 true는 값을 1로 설정하는 격이다.

enum month{ january = 1, february, march, april, may, june, july, august, september, october, november, december};

Objective-C 컴파일러는 열거 식별자를 정수 상수로 여긴다.

저작자 표시
신고

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

[Objective C: 숫자 객체]  (0) 2010.07.18
[Objective C: 전처리기]  (0) 2010.07.18
[Objective C: 열거 데이터 형]  (0) 2010.07.17
[Objective C: const 키워드]  (0) 2010.07.17
[Objective C: 접근 제한자]  (0) 2010.07.17
[Objective C: 초기화 메서드]  (0) 2010.07.17
Trackback 0 | Comment 0
컴파일러는 프로그램에서 값이 변하지 않는 변수에 const 속성을 부여한다.

const double pi = 3.141592654;

이 코드는 컴파일러에게 프로그램이 이 값을 수정하지 않을 것이라고 알려 준다. 물론 const 변수의 값을 수정할 수 없으므로 정의할 때 바로 초기화 주어야 한다. 또한 이렇게 const 변수로 정의하면, 코드 스스로 문서화되어 코드를 읽는 사람에게 프로그램이 해당 변수의 값을 변경하지 않는다는 것을 알릴 수 있다.


저작자 표시
신고

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

[Objective C: 전처리기]  (0) 2010.07.18
[Objective C: 열거 데이터 형]  (0) 2010.07.17
[Objective C: const 키워드]  (0) 2010.07.17
[Objective C: 접근 제한자]  (0) 2010.07.17
[Objective C: 초기화 메서드]  (0) 2010.07.17
[Objective C: 예외처리]  (0) 2010.07.17
Trackback 0 | Comment 0
인터페이스 부분에서 인스턴스 변수를 선언할 때 선언 앞에 네 가지 지시어를 붙임으로써 범위를 더 상세히 설정할 수 있다. 네 가지 지시어를 살펴보자.

@protected - 어떤 클래스에서 인스턴스 변수가 정의되었을 때, 그 클래스와 그 서브 클래스에 정의된 메서드는 이 인스턴스 변수에 바로 접근할 수 있다.

@private - 클래스에 정의된 메서드는 인스턴스 변수에 바로 접근할 수 있지만, 서브 클래스의 메서드는 접근할 수 없다.

@public - 인스턴스 변수가 정의된 클래스와 그 밖의 클래스 그리고 모듈에 정의된 메서드라면, 인스턴스 변수에 바로 접근할 수 있다.(어디서든 인스턴스 변수에 접근 할 수 있다.)

@package - 64비트 이미지의 경우, 그 클래스를 구현하는 이미지 안에서는 어디든 인스턴스 변수에 접근할 수 있다.
저작자 표시
신고

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

[Objective C: 열거 데이터 형]  (0) 2010.07.17
[Objective C: const 키워드]  (0) 2010.07.17
[Objective C: 접근 제한자]  (0) 2010.07.17
[Objective C: 초기화 메서드]  (0) 2010.07.17
[Objective C: 예외처리]  (0) 2010.07.17
[Objective C: 동적바인딩과 id형]  (0) 2010.07.17
Trackback 0 | Comment 0
만일 클래스가 초기화 메서드를 하나 이상 갖는다면, 그 가운데 하나는 '지정된 초기화 메서드'여야 하고, 다른 메서드는 모두 이 초기화 메서드를 사용해야 한다. 지정된 초기화 메서드는 대개 가장 복잡한 초기화 메서드, 즉 가장 많은 인수를 받는 메서드다.

상속받은 인스턴스 변수를 적절히 초기화해 주어야 한다. 가장 쉽게는 먼저 모의 지정된 초기화 메서드(보통 init이다)를 호출해 주는 방법이 있다. 그 후 새로 정의한 인스턴스 변수를 초기화해 주면 된다.

이러한 내용을 바탕으로 보건대, Fraction 클래스의 초기화 메서드 initWith::는 다음과 비슷한 형태일 것이다.

-(Fraction *) initWith: (int) n: (int) d
{
     self = [super init];
     if(self)
          [self setTo: n over: d];
     return self;
}

이 메서드는 부모의 초기화 메서드인 NSObject의 init 메서드를 먼저 호출한다. (NSObject가 Fraction의 부모임을 기억하라). 초기화 메서드는 메모리 상의 객체를 바꾸거나 이동시킬 권한이 있기 때문에, 반환값을 self에 할당해 주어야 한다. super를 초기화한 후에(그리고 반환 값이 0이 아니어서 초기화가 성공한 경우) setTo:over: 메서드를 사용하여 Fraction의 분자와 분모를 설정해 준다. 다른 초기화 메서드와 마찬가지로, 초기화된 객체를 반환해 주어야 한다.
저작자 표시
신고

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

[Objective C: const 키워드]  (0) 2010.07.17
[Objective C: 접근 제한자]  (0) 2010.07.17
[Objective C: 초기화 메서드]  (0) 2010.07.17
[Objective C: 예외처리]  (0) 2010.07.17
[Objective C: 동적바인딩과 id형]  (0) 2010.07.17
[Objective C: @class 지시어]  (0) 2010.07.16
Trackback 1 | Comment 0
좋은 프로그래밍 습관은 프로그램에서 발생할 수 있는 문제들을 미리 생각해 보고 그에 대처하는 것이다. 프로그램을 비정상 종료시키는 조건을 테스트하여 메시지를 표시하고, 프로그램을 종료시키거나 다른 액션을 취하는 식으로 문제를 해결할  수 있다.

경고메세지를 받더라도 프로그래믈 빌드하고 실행할 수 있다. 그러나 경고 메세지를 무시하고 실행하면 프로그램은 비정상 종료하게 되고 오류를 보게 될 것이다. 이렇게 프로그램이 비정상 종료되는 것을 막으려면 다음과 같이 특별한 명령문 블록안에 명령문들을 넣어 주면 된다.

@try
{
     statement
     statement
     ....
}
@catch(NSException *exception)
{
     statement
     statement
     ...
}

@try 블록에 있는 각 statement 역시 일반적인 명령문과 동일하게 실행된다. 그러나 블록 안에 있는 이 명령문 가운데 하나가 예외를 날리면, 실행은 종료되지 않고 @catch 블록으로 넘어간다. 그리고 catch 블록 안에서 날라온 예외를 처리하게 된다. 이때 취할 수 있는 방법은 오류 메시지를 기록하고 정리한 후 실행을 종료하는 것이다.

예외가 발생하면 @catch 블록이 실행된다. 이 예외에 대한 정보를 담고 있는 NSException 객체가 이 블록의 인수로 넘겨진다. @catch 블록에 있는 마지막 명령문이 실해오디고 나면, 프로그램은 그 블록 뒤의 명령문을 이어서 실행한다.

@finally 블록을 사용하면 @try 블록에서 예외를 던지든 던지지 않든 실행할 코드를 추가할 수 도 있다.

저작자 표시
신고

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

[Objective C: 접근 제한자]  (0) 2010.07.17
[Objective C: 초기화 메서드]  (0) 2010.07.17
[Objective C: 예외처리]  (0) 2010.07.17
[Objective C: 동적바인딩과 id형]  (0) 2010.07.17
[Objective C: @class 지시어]  (0) 2010.07.16
[Objective C: 상속]  (0) 2010.07.16
Trackback 0 | Comment 0
id 데이터 형을 일반 객체 형이라고 말한다. 그것은 id형을 써서 어느 클래스의 객체든 저장할 수 있다는 의미다. id형은 프로그램이 실행되는 동안 다양한 데이터 형 객체를 여기에 저장할 때에야 비로소 진정한 강점을 맛보게 된다.

만일 id 데이터 형이 어느 객체든 담을 수 있다면, 왜 모든 객체를 그냥 id형으로 선언하지 않는 것일까? 이 일반 클래스 데이터 형을 남용하지 않는데는 이유가 있다. 먼저 정적 타이핑이라는 말은, 특정 클래스의 객체로 변수를 정의하는 것이다. '정적' 이라는 말은 변수가 언제나 그 특정 클래스를 저장하는 데만 사용된다는 의미다. 따라서 저장된 객체의 클래스는 언제나 이미 정해져 있다. 혹은 '정적이다.'라고 할 수도 있다. 정적 타이핑을 사용하면, 컴파일러는 프로그램에서 변수를 일관성 있게 사용하여 최고 성능을 내게 한다.
저작자 표시
신고

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

[Objective C: 초기화 메서드]  (0) 2010.07.17
[Objective C: 예외처리]  (0) 2010.07.17
[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
Trackback 0 | Comment 0
#import는 여러 소스로 선언되고 구현된 클래스를 사용할 때 어떤 클래스가 다른 클래스를 참조해야할 때 사용한다. 그런데 #import로 다른 클래스를 참조할 때 간혹 문제가 발생한다. 예를 들어 A클래스가 B클래스를 참조하고, B클래스가 A클래스를 참조해야 한다면 각각 #import로 참조해야 하는 경우가 있다. 이 때 사용할 수 있는 지시자가 바로 @class이다.

@class를 사용하면 #import로 다른 클래스의 헤더 파일을 참조하지 않아도 컴파일러가 묵시적으로 해당 클래스의 존재를 인식하고 컴파일 해준다. 또 한 파일에 클래스를 여러 개 구현할 때 아래에 선언한 클래스를 위에서 참조할 필요가 있을 때도 사용할 수 있다.

그러므로 어떤 클래스를 사용하는데 있어서 그 클래스의 메소드나 기타 상세한 정보가 필요치 않은 경우 @class 지시자로 충분하다.

[Example @class]

#import <Foundation/Foundation.h>

@class XYPoint;
@interface Rectangle: NSObject
{
     int width;
     int height;
     XYPoint *origin;
}

@property int width, height;

-(XYPoint *) origin;
-(void) setOrigin: (XYPoint *) pt;
-(void) setWidth: (int) w andHeight: (int) h;
-(void) area;
-(void) perimeter;

@end

@class XYPoint;
@class 지시어를 사용하면, Rectangle에서 XYPoint 형식의 인스턴스 변수를 만나게 될 때, 컴파일러에게 그 클래스가 무엇인지 알려준다. setOrigin과 origin 메서드에서도 클래스 이름을 인수와 반환 값을 선언하는 데 사용한다. @class를 쓰는 대신 다음과 같이 헤더파일을 임포트하는 방법도 있다.

#import "XYPoint.h"

@class 지시어를 달면 컴파일러가 XYPoint.h파일 전체를 처리할 필요가 없어지기 때문에 좀더 효율적이다.  컴파일러는 그저 XYPoint가 클래스 이름이라는 것만 알고 있으면 된다. 만일 XYPoint 클래스의 메서드를 사용해야 한다면, 컴파일러에게 더 많은 정보가 필요하기 때문에 @class지시어로는 충분치 않다. 이때 컴파일러는 메서드가 인수를 얼마나 많이 받는지, 인수가 어떤 형인지, 어떤 값을 반환하는지에 대한 정보를 알아야 한다.


저작자 표시
신고

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

[Objective C: 예외처리]  (0) 2010.07.17
[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
Trackback 0 | Comment 0

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

 

티스토리 툴바