1. 오전일정 : Objective-C
함수
- Objective-C Foundation Framework는 프로그램에서 호출할 수 있는 수많은 기본 메서드를 제공합니다.
- 메소드는 함수, 서브루틴, 프로시저 등과 같이 다양한 이름으로 알려져 있다.
메서드
- Objective-C 메서드의 정의는 메서드 헤더와 메서드 본문으로 구성됩니다.
//swift 함수 호출
func myMethod(name: String, age: Int) -> Void
myInstance.myMethod(name: "ned", age: 13)
//objective-c 함수 호출
- (void)myMethodWithName:(NSString *)name age:(int)age
[myInstance myMethodWithName:@"ned", age:13]
- 밖에서 사용하는 변수명과 안에서 사용하는 변수명을 다르게 사용하는 예시
//Swift 코드
func myMethod(myName name: String, myAge age: Int) { //밖에서 myName, myAge | 안에서 name, age
print("(name) (age)")
}
myInstance.myMethod(myName: "ned", myAge: 13)
//Objective-C
- (void)myMethodWithMyName:(NSString *)name myAge:(int)age { //밖에서 myName, myAge | 안에서 name, age
// name 활용
// age 활용
}
[myInstance myMethodWithMyName:@"ned", myAge:13]
블록(클로저의 조상님)
- C, Objective-C, C++에 추가된 언어 수준 기능으로, 이를 통해 마치 값인 것처럼 메서드나 함수에 전달할 수 있는 고유한 코드 세그먼트를 만들 수 있다.
- 블록은 NSArray 또는 NSDictionary와 같은 컬렉션에 추가할 수 있음을 의미하는 Objective-C 개체이다.
- 값을 캡처하여 다른 프로그래밍 언어의 클로저 또는 람다와 유사하게 만드는 기능이 있다.
<단순 블록 선언 구문>
returntype (^blockName)(argumentType); //Objective-C는 return타입을 앞에 쓰는게 국룰
returntype (^blockName)(argumentType)=^{
};
2. 오후일정 : Objective-C
배열
- Objective-C에서 배열을 하나씩 초기화하거나 다음과 같이 단일 명령문을 사용하여 초기화할 수 있다.
- 중괄호 {} 사이에 들어가는 값들의 수는 대괄호 [] 사이의 배열에 대한 선언 요소 수보다 클 수 없다.
- 배열의 크기를 생략하면 초기화를 담을 수 있을 만큼 큰 배열이 생선된다.
int main(int argc, const char * argv[]) {
@autoreleasepool {
int myArray[10];
int i, j;
for (i=0; i<10; i++) {
myArray[i] = i + 100;
}
for (j=0; j<10; j++) {
NSLog(@"Element[%d] = %d\n", j, myArray[j]);
}
}
return 0;
}
배열 세부사항
- 다차원 배열, 함수의 배열 전달, 함수에서의 배열 반환, 배열에 대한 포인터 -> 강사님 강의자료 참고
포인터 = 시작번지 + 타입에 대한 정보
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
int age = 13;
double height = 145.32;
// 변수에 담긴 값을 출력
NSLog(@"value of age : %d", age);
NSLog(@"value of hegith : %f", height);
// 변수가 위치한 메모리 안에서의 주소
NSLog(@"address of age : %x", &age);
NSLog(@"address of height : %x", &height);
// 포인터 정보 = 해당 데이터의 메모리 주소 + 메모리를 차지하는 크기
// 토지대장 = 주소지(경상북도 울릉군...) + 몇 평수 정보(임야 13평)
return 0;
}
#import <Foundation/Foundation.h>
@interface SampleClass : NSObject
- (void)sayHello;
@end
@implementation SampleClass
- (void)sayHello {
NSLog(@"Hello World");
}
@end
int main(int argc, const char * argv[]) {
// 포인터 정보 = 해당 데이터의 메모리 주소 + 메모리를 차지하는 크기
// 토지대장 = 주소지(경상북도 울릉군...) + 몇 평수 정보(임야 13평)
int age = 17;
// 변수 age의 주소를 확인해서, int 타입이 담길 거라고 생각하는 포인터 변수 만들기
int *infoOfAge = &age;
NSLog(@"age는 %p 주소에 위치했습니다.", infoOfAge);
// age는 0x16fdff3ac 주소에 위치했습니다.
NSLog(@"age의 메모리 크기는 %zu 바이트입니다.", sizeof(int));
// age의 메모리 크기는 4 바이트입니다.
NSLog(@"처음 %p 주소에 가보니 %d 값이 들어있습니다.", infoOfAge, *infoOfAge);
// 처음 0x16fdff3ac 주소에 가보니 17 값이 들어있습니다.
*infoOfAge = 32;
NSLog(@"다시 %p 주소에 가보니 %d 값이 들어있습니다.", infoOfAge, *infoOfAge);
// 다시 0x16fdff3ac 주소에 가보니 32 값이 들어있습니다.
NSLog(@"%p를 가르키는 정보의 메모리 크기는 %zu 바이트입니다.", infoOfAge, sizeof(int *));
// 0x16fdff3ac를 가르키는 정보의 메모리 크기는 8 바이트입니다.
// SampleClass의 인스턴스를 만들어서
// 그 메모리의 위치 정보를 SampleClass클래스에 맞춘 포인터 변수 sampleClass에 할당한다
// 클래스에 의해 만들어지는 인스턴스는 무조건 포인터 단위로 관리해야만 활용 가능하다.
SampleClass *sampleClass = [[SampleClass alloc] init];
// sampleClass 포인터 정보가 가르키는 인스턴스 데이터를 찾아가서
// 데이터에 명시된 sayHello 메소드를 실행하라
[sampleClass sayHello];
return 0;
}
문자열
- Objective-C의 문자열은 NSString을 사용하여 표현되며 하위 클래스 NSMutableString은 문자열 개체를 생성하는 여러 방법을 제공한다.
- 문자열 개체를 만드는 가장 간단한 방법은 '@"..."' 구문을 사용하는 것이다.
#import <Foundation>
int main() {
NSString *greeting = @"Hello"; //@는 NS객체를 출력할 때 사용하는 것, String에만 국한되는 것이 아님
NSLog(@"%@\n", greeting);
}
3. 오늘의 리뷰
공부하고 싶은게 많다! 알고 싶은게 매우 많다! 정리하고 싶은게 진자 많다! 하지만... 체력이 안돼... 집중력이 떨어지는데 뭔가 좋은게 없을까... 고민이 된다.
'멋쟁이사자처럼 앱스쿨 1기' 카테고리의 다른 글
[멋쟁이사자처럼] 앱스쿨 1기 - SwiftUI (22일차 22.10.18) (1) | 2022.10.18 |
---|---|
[멋쟁이사자처럼] 앱스쿨 1기 - Objective-C (17일차 22.10.11) (1) | 2022.10.11 |
[멋쟁이사자처럼] 앱스쿨 1기 - Objective-C (15일차 22.10.06) (2) | 2022.10.06 |
[멋쟁이사자처럼] 앱스쿨 1기 - 클로저&이스케이프 클로저 (14일차 22.10.05) (0) | 2022.10.06 |
[멋쟁이사자처럼] 앱스쿨 1기 - Swift 에러 핸들링&열거형(Enum)&제너릭(Generics) (13일차 22.10.04) (0) | 2022.10.04 |