Objective-C

4.[Objective-C] Function(함수)

Daesiker 2021. 1. 27. 16:06
반응형

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;
}

→ 앞서 말했듯이 첫번째 파라미터에 들어가는 변수는 함수 다음에 바로 선언한다.


반응형

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

3. [Objective C] Class(2)  (0) 2021.01.26
2. [Objective-C] Class(1) Property  (0) 2021.01.26
1. [Objective-C] NSLog, 변수  (0) 2021.01.25