4-1 개요
함수를 진행한 뒤에 클래스를 하는 것이 맞았는데 거꾸로 포스팅을 한 것 같다.
Objective C의 함수는 C언어와 거의 유사한 구조를 가지고 있다.
4-2 함수 선언
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
//instance
{
int myAge;
NSString *myName;
NSString *mySubject;
}
//property
@property (nonatomic, assign) int myAge;
@property (nonatomic, retain) NSString *myName;
@property (nonatomic, retain) NSString *mySubject;
//instanceMethod
- (void) instanceMethod;
- (NSString *) setMySubject;
- (void)getMySubject: (NSString *) myName;
+ (void) isItClassMethod;
//new instance Method
- (NSInteger) addInteger:(NSInteger)firstInt secondInt:(NSInteger) secondInt;
- (NSString *) changeToUpperOrLowerCaseWithString:(NSString *)stringValue isTrue:(BOOL)isTrue;
- (void) printClass;
@end
전에 클래스를 공부할 때 사용하던 소스에서 함수를 3개 더 추가하였다.
함수를 사용하기 전에 정의를 먼저해야하는데 정의하는 부분은 .h파일에서 정의를 한다.
⚫ 반환값이 없는 메서드
- (void) 함수명;
반환값이 없는 타입의 함수는 괄호에 void를 입력하면 된다.
제일 앞에 - 는 인스턴스 함수 + 는 클래스 함수이다. (class 파트로 가기!)
⚫ 반환값이 존재하고 파라미터가 1개인 경우
+ (반환값 타입) 함수명: (파라미터 타입) 파라미터 변수;
—반환값 타입 : 함수를 호출한뒤 어떤 타입의 값을 반환할 건지를 결정해준다.
—파라미터 타입 : 함수 내에서 사용할 파라미터 변수가 어떤 타입인지 결정해준다.
⚫ 반환값이 존재하고 파라미터가 여려개인 경우
+ (반환값 타입) 함수명: (파라미터1타입) 파라미터1이름 파라미터2 (파라미터2타입) 파라미터2 이름 .....
—첫번째 파라미터만 선언부에 파라미터가 없기 때문에 함수명을 쓰고 값을 입력하면 된다. (하단 참조)
4-3 함수 구현
@implementation MyClass
//프로퍼티 구현
@synthesize myAge, myName, mySubject;
//instance Method 구현
//호출되면 로그를 남기는 메서드
- (void) instanceMethod {
NSLog(@"It is instance Method");
}
//mySubject 인스턴스를 생성하는 메서드(setter)
- (void) setMySubject:(NSString *)subject {
mySubject = [NSString stringWithString:subject];
}
//mySubject 인스턴스를 가져오는 메서드(getter)
- (NSString *) getMySubject {
return mySubject;
}
//class Method 구현
+ (void) isItClassMethod {
NSLog(@"It is class Method");
}
//두 정수의 합을 반환하는 메서드(첫번째 파라미터는 파라미
- (NSInteger) addInteger:(NSInteger)firstInt secondInt:(NSInteger)secondInt {
return firstInt + secondInt;
}
//모든 문자열을 소문자 또는 대문자로 반환하여 반환하는 메서드
- (NSString *) changeToUpperOrLowerCaseWithString:(NSString *)stringValue isTrue:(BOOL)isTrue {
//isTrue 파라미터가 YES이면
if ( isTrue == YES) {
//대문자 반환
return [stringValue uppercaseString];
} else {
//아니면 소문자 반환
return [stringValue lowercaseString];
}
}
- (void) printClass {
NSLog(@"Hi~~");
}
@end
— void 함수를 제외하고는 반드시 return 값이 존재해야한다.
— 함수를 생성할때 쓰는 파라미터명과 함수안에서 사용하는 파라미터 변수명을 따로 지정해야된다.
— 첫번째 파라미터는 파라미터명이 없다.(함수를 생성할 때 쓰지 않는다.)
— 왜 이렇게 만들었을까요??🤮
4-4 함수 생성
#import <Foundation/Foundation.h>
#import "MyClass.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//객체를 만들고 초기화를 한다.
MyClass *object = [[MyClass alloc] init];
//NSInteger 타입의 변수 3개 선언
NSInteger firstNum = 200;
NSInteger secondNum = 100;
NSInteger resultInt = 0;
//addInteger라는 인스턴스 메서드를 호출하여 그 반환값을 resultInt에 저장한다.
resultInt = [object addInteger:firstNum secondInt:secondNum];
//값을 확인하기위한 로그제작
NSLog(@"resultInt : %ld (%ld + %ld)", resultInt, firstNum, secondNum);
//NSString 타입의 변수 선언
NSString *nameString = @"Daesiker";
NSString *resultString = NULL;
//changeToUpperOrLowerCaseWithString 함수 호츌
//isTrue값에 YES값을 넣어주었기 떄문에 대문자 문자열을 반환한다.
resultString = [object changeToUpperOrLowerCaseWithString:nameString isTrue:YES];
NSLog(@"resultString: %@", resultString);
//isTrue값에 NO값을 넣어주었기 떄문에 소문자 문자열을 반환한다.
NSLog(@"resultString: %@", [object changeToUpperOrLowerCaseWithString:nameString isTrue:NO]);
}
return 0;
}
→ 앞서 말했듯이 첫번째 파라미터에 들어가는 변수는 함수 다음에 바로 선언한다.
Uploaded by Notion2Tistory v1.1.0