NSLog
- 디버그 영역의 콘솔에 정보 출력하기
- NSLog(@”문자열 포맷”,인자)
- 문자열: @”문자열”
- 포맷 문자열과 인자 대치
포맷 문자열
- 정수형
- %d, %u(unsigned)
- %ld, %lu(long 타입)
- 실수형
- %f, %e(지수형)
- 16진수, 8진수
- %x,%o
- 객체형
- %@
- 다수의 데이터 사용
- NSLog(@”%d + %d = %d”, 1, 2, (1+2));
- 포맷 문자열
- 개발자 사이트에서 string format specifier 검색하기
클래스
어플리케이션이란?
- 컨텐츠를 얻어와서 사용자에게 출력
- 사용자의 동작에 반응하여 컨텐츠 가공
- 컨텐츠의 공유
이때 어플리케이션에서 클래스란?
- 데이터와 데이터를 조작하는 행위의 단위
객체
- 실제 데이터가 반영하여 동작 중인 개체(instance, object)
- 클래스에서 객체 생성
객체 생성하기
- 객체 생성: 객체 생성하는 행위를 동작
- 객체 생성 메소드 표기
- [[”클래스 이름” alloc]init]
- NSObject 객체 생성하는 코드
- [[NSObject alloc]init]
- 객체 생성 → 메모리 공간에 할당
- 주소: 읽고 쓰기 어렵다 ex)0x100114580
- 사용하기 쉽도록 포인터 이용
- NSObject *obj = [[NSObject alloc]init];
- 하나의 객체에 다수의 포인터 사용
- NSObject *obj2 = obj;
- 객체 및 포인터 만들어보고 확인해보기
메소드란?
- 메소드 : 클래스의 행위를 정의
- 동작 수행 : 객체에 메소드를 호출
- 메세지 : 객체에 메소드를 호출해서 동작 수행
- 리시버 : 메세지를 받아서 종작을 수행하는 객체
- 센더 : 메세지를 보내는 객체
- Objective-C에서 NSString 클래스의 length 메소드란?
- (NSUInteger)length
- 메소드 호출 표기 : [리시버 메세지]
- 문자열 객체에 length 메소드 호출
- [str length];
- 메소드 연속 호출
- [[NSString alloc] init]
- 객체가 동작 결과를 센더에게 알려주는 법
- length 메소드 : 정수형 반환값
- (NSUInteger)length
- 반환값 저장하기
- NSUInteger length = [str length];
- void : 반환값이 없는 경우
- (void)appendString:(NSString *)aString;
- length 메소드 : 정수형 반환값
매소드 선언에서 데이터 타입 정의
- 메소드 실행 과정에서 정보받기 → 메소드의 실행 결과를 반환
Objective-C에서 원시 타입
- 씨 언어의 원시 타입을 그대로 사용
- 정수형
- char, short, int, long
- 실수형
- float, double, long double
- 부울형은 BOOL 사용, YES나 NO
- BOOL b = YES;
- NSInteger : 플랫폼 별 크기 설정
- iOS 환경
- 32비트 환경: int, 4바이트
- 64비트 환경: long, 8바이트
- NSUInteger : unsigned
- 반환값, 파라미터가 객체 : 클래스 이름과 *
- (NSString *)uppercaseString;
- 구조체, *없이 사용
- (NSRange)rangeOfString:(NSString *)aString;
메소드 구현 실습
- length 메소드 실습
- NSString에 정의된 다른 메소드 사용하기
메소드의 파라미터
- 메소드 호출시 정보 전달
- 파라미터 레이블과 콜론(:) 사용
NSString의 compare 메소드
- (NSComparisonResult)compare:(NSString *)string
- (NSComparisonResult)compare:(NSString *)string options: (NSStringCompareOptions)mask
- (NSComparisonResult)compare:(NSString *)string options: (NSStringCompareOptions)mask range:(NSRange)compareRange
- 콜론 사용, 메소드 레이블
- 반환 타입 : NSComparisonResult
- enum으로 정의된 상수
typedef NS_ENUM(NSInterger, NSComparisonResult) {
NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending
};
파라미터가 정의된 메소드 구현 실습
인스턴스 메소드와 클래스 메소드
- 클래스 메소드
- (+) 기호 사용
- 리시버가 클래스
- alloc 메소드, 팩토리 메소드
- 메소드 정의 예제
-
- (instancetype)string;
-
- 인스턴스 메소드
- (-) 기호 사용
- 리시버가 객체
- 객체 생성 과정 필요
- 객체에 설정된 정보 사용 가능
- 메소드 정의 예제
- -(NSUInteger)length;
- 객체를 생성하는 메소드
- alloc/init
- 다양한 init 계열의 메소드(NSString 클래스)
- -(id)init;
- -(id)initWithString:(NSString *)aString;
- -(id)initWithFormat:(NSString *)format, …;
- -(id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;
NSString *str1 = [[NSString alloc]initWithString:@"Hello Objective C"];
NSString *str2 = [[NSString alloc]initWithFormat:@"Hello %@", @"Objective C"];
NSLog(@"str1 :%@",str1);
NSLog(@"str2 :%@",str2);
팩토리 메소드
- 팩토리 메소드 : 객체를 생성하는 목적의 코드 작성 패턴
- 팩토리 메소드 이름 : 클래스의 이름으로 시작
- NSString 클래스의 팩토리 메소드
-
- (instancetype)string;
- (instancetype)stringWithString:(NSString *)string;
- (instancetype)stringWithFormat:(NSString *)format, …
- NS_FORMAT_FUNCTION(1,2)
-
- 코드 예제
- NSString *str = [NSString stringWithFormat:@”Hello %@”,@”Objective C”];
NSString *str1 = [NSString stringWithString:@"Factory Method"]; NSString *str2 = [NSString stringWithFormat:@"Factory : %@", @"Method"]; NSLog(@"str1 : %@", str1); NSLog(@"str2 : %@", str2);
포인터 nil
- nil : 아무런 객체를 가리키지 않는 상태
- 포인터 변수만 선언한 경우
- nil 상태를 이용한 객체 생성(Lazy Initialization)
NSString *str;
NSLog(@"str : %@", str);
if (nil == str) {
str = [NSString stringWithFormat:@"Hello %@",@"Objective C"];
}
NSLog(@"str : %@", str);
- nil에 메소드 호출 → 무시
- 반환값은 0 or nil
NSString *str = nil;
// nill에다가 uppercaseString 메소드를 호출하게 되면 nill이 나옴
NSLog(@"Upper Case String : %@", [str uppercaseString]);
// nill에다가 length라는 메소드를 호출하게되면 0이 나옴
NSLog(@"Length : %lu", (unsigned long)[str length]);
'IOS > Objective-C' 카테고리의 다른 글
[Objective-C] 객체 생성 메소드 (0) | 2023.03.09 |
---|---|
[Objective-C] 동적 타입과 바인딩 (0) | 2023.03.09 |
[Objective-C] Class 상속 (0) | 2023.03.09 |
[Objective-C] Class 만들어보기 (0) | 2023.02.28 |
[Objective-C] Objective-C 파일 살펴보기 (0) | 2023.02.26 |