1. 사전 프로젝트 코드 세팅하고 오기

 

https://growingsaja.tistory.com/869

 

[Objective-C] 프로젝트 기본 세팅 소스코드 예시

1. AppDelegate 수정 with 설명 // vim AppDelegate.h #import // MARK: - [클래스 설명] /* // ----------------------------------------- 1. 애플리케이션 딜리게이트 (선언부) 2. 전역변수 , 메소드 , 인스턴스변수 (클래스 생

growingsaja.tistory.com

 

 

 

 

 

2. ViewController.h에서 사용할 클래스 및 인스턴스 선언하기

 

// vim ViewController.h

// UIKit 프레임워크의 헤더 파일을 import합니다. UIKit은 iOS 애플리케이션 개발에 필요한 다양한 클래스와 기능을 제공합니다.
#import <UIKit/UIKit.h>
// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (선언부)
2. 전역변수 , 메소드 , 인스턴스변수 (클래스 생성자) 선언
// -----------------------------------------
*/
// UIKit 프레임워크의 헤더 파일을 import합니다. UIKit은 iOS 애플리케이션 개발에 필요한 다양한 클래스와 기능을 제공합니다.
#import <UIKit/UIKit.h>
// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (선언부)
2. 전역변수 , 메소드 , 인스턴스변수 (클래스 생성자) 선언
// -----------------------------------------
*/

// -----------------------------------------
@interface ViewController : UIViewController
// -----------------------------------------


// -----------------------------------------

/*
MARK: [요약 설명]
1. 클래스 메소드
  - 헤더 파일에 클래스 메소드 선언 시 다른 클래스에서도 호출해서 사용가능합니다
  - 클래스 메소드를 사용하기 위해서는 [클래스명 메소드명]; 으로 구현(m) 부분에서 사용할 수 있습니다
 
2. 인스턴스 메소드
  - 헤더 파일에 선언 후 실제 구현(m) 부분에서 호출해서 사용가능하며,
    헤더 파일에 선언 없이 구현(m) 부분에서 즉시 선언 및 구현 해서 사용할 수 있습니다
  - 인스턴스 메소드를 사용하기 위해서는 [self 메소드명]; 으로 구현(m) 부분에서 사용할 수 있습니다
  - 다른 클래스에서 인스턴스 메소드를 사용하기 위해서는 객체 생성 후 메소드를 호출해서 사용할 수 있습니다 (alloc)
*/

// -----------------------------------------

// MARK: [[static] 클래스 메소드 [선언] : void : not input]
+ (void)classVoidFunction;


// MARK: [[static] 클래스 메소드 [선언] : return : input]
+ (NSInteger)classSumFunction: (NSInteger)oneData :(NSInteger)twoData;

// -----------------------------------------

// MARK: [[self/객체생성] 인스턴스 메소드 [선언] : void : not input]
- (void)insVoidFunction;


// MARK: [[self/객체생성] 인스턴스 메소드 [선언] : return : input]
- (NSInteger)insSumFunction: (NSInteger)oneData :(NSInteger)twoData;

// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

3. ViewController.m에서 사용할 클래스 및 인스턴스 구현하고 활용하기

 

// vim ViewController.m

// ViewController.h 파일을 import하여 해당 클래스의 정의를 가져옵니다.
#import "ViewController.h"


// MARK: - [헤더 [선언부] 호출]
@interface ViewController ()
@end
@implementation ViewController



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [뷰 로드 실시]
// 메서드를 구현합니다. 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출되는 메서드입니다.
- (void)viewDidLoad {
    // 부모 클래스인 UIViewController의 viewDidLoad 메서드를 호출합니다.
    [super viewDidLoad];
    NSLog(@"[ViewController >> viewDidLoad() :: 뷰 로드 실시]");
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"[ViewController >> viewWillAppear() :: 뷰 로드 완료]");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"[ViewController >> viewDidAppear() :: 뷰 화면 표시]");
    
    // [테스트 메인 함수 호출]
    [self testMain];
}



// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"[ViewController >> viewWillDisappear() :: 뷰 정지 상태]");
}


// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"[ViewController >> viewDidDisappear() :: 뷰 종료 상태]");
}


// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
    NSLog(@"[ViewController >> testMain() :: 테스트 메소드 수행]");
    
    // MARK: - [[static] 클래스 메소드 [호출] : void : not input]
    [ViewController classVoidFunction];
    
    
    // MARK: [[static] 클래스 메소드 [선언] : return : input : 일반]
    NSInteger clssSum = [ViewController classSumFunction:10 :20];
    NSLog(@"[clssSum [결과] :: %ld]", (long)clssSum);
    
    
    // MARK: - [[self] 인스턴스 메소드 [호출] : void : not input]
    [self insVoidFunction];
    
    
    // MARK: - [[객체생성] 인스턴스 메소드 [호출] : void : not input]
    ViewController *vc = [[ViewController alloc] init];
    [vc insVoidFunction];
    
    
    // MARK: [[self] 인스턴스 메소드 [선언] : return : input : 일반]
    NSInteger insSum = [self insSumFunction:30 :40];
    NSLog(@"[insSum [결과] :: %ld]", (long)insSum);
    
}

// ------ 클래스 정의하기 ------ //

// MARK: - [[static] 클래스 메소드 [구현] : void : not input]
+ (void)classVoidFunction {
    NSLog(@"[ViewController >> classVoidFunction() :: void 메소드 수행]");
}

// MARK: [[static] 클래스 메소드 [선언] : return : input]
+ (NSInteger)classSumFunction: (NSInteger)oneData :(NSInteger)twoData {
    NSLog(@"[ViewController >> classSumFunction() :: return 메소드 수행]");
    return (oneData + twoData);
}

// ------ 인스턴스 정의하기 ------ //

// MARK: - [[self/객체생성] 인스턴스 메소드 [선언] : void : not input]
- (void)insVoidFunction {
    NSLog(@"[ViewController >> insVoidFunction() :: void 메소드 수행]");
}

// MARK: [[self/객체생성] 인스턴스 메소드 [선언] : return : input]
- (NSInteger)insSumFunction: (NSInteger)oneData :(NSInteger)twoData {
    NSLog(@"[ViewController >> insSumFunction() :: return 메소드 수행]");
    return (oneData + twoData);
}

// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

4. 실행해 정상적으로 가동되는거 확인

 

 

 

 

 

 

5. CalculatorTmp 파일 작성

 

// vim CalculatorTmp.h

#import <Foundation/Foundation.h>

@interface CalculatorTmp : NSObject

// 클래스 메서드 (+)
+ (NSInteger)add:(NSInteger)number1 toNumber:(NSInteger)number2;

// 인스턴스 메서드 (-)
- (void)setMemory:(NSInteger)value;
- (NSInteger)addToMemory:(NSInteger)value;

@end

 

// vim CalculatorTmp.m

#import "CalculatorTmp.h"

@implementation CalculatorTmp {
    NSInteger _memory;
}

+ (NSInteger)add:(NSInteger)number1 toNumber:(NSInteger)number2 {
    return number1 + number2;
}

- (void)setMemory:(NSInteger)value {
    _memory = value;
}

- (NSInteger)addToMemory:(NSInteger)value {
    _memory += value;
    return _memory;
}

@end

 

 

 

 

 

6. ViewController 파일 수정

 

// vim ViewController.h

// UIKit 프레임워크의 헤더 파일을 import합니다. UIKit은 iOS 애플리케이션 개발에 필요한 다양한 클래스와 기능을 제공합니다.
#import <UIKit/UIKit.h>
// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (선언부)
2. 전역변수 , 메소드 , 인스턴스변수 (클래스 생성자) 선언
// -----------------------------------------
*/

// -----------------------------------------
@interface ViewController : UIViewController
// -----------------------------------------

// MARK: [전역 변수 및 메소드 선언 부분]

// -----------------------------------------
@end
// -----------------------------------------

 

// vim ViewController.m

// ViewController.h 파일을 import하여 해당 클래스의 정의를 가져옵니다.
#import "ViewController.h"
#import "CalculatorTmp.h"

// MARK: - [헤더 [선언부] 호출]
@interface ViewController ()
@end

// -----------------------------------------
@implementation ViewController
// -----------------------------------------

// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/

// MARK: - [뷰 로드 실시]
// 메서드를 구현합니다. 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출되는 메서드입니다.
- (void)viewDidLoad {
    // 부모 클래스인 UIViewController의 viewDidLoad 메서드를 호출합니다.
    [super viewDidLoad];
    NSLog(@"[뷰 로드 실시] ::: ViewController >> viewDidLoad()");
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"[뷰 로드 완료] ::: ViewController >> viewWillAppear()");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"[뷰 화면 표시] ::: ViewController >> viewDidAppear()");\
    
    [self testMain];
}



// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"[뷰 정지 상태] ::: ViewController >> viewWillDisappear()");
}


// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"[뷰 종료 상태] ::: ViewController >> viewDidDisappear()");
}


- (void)testMain {
    @autoreleasepool {
        // 클래스 메서드를 호출합니다.
        NSInteger result = [CalculatorTmp add:10 toNumber:20];
        NSLog(@"Result of class method: %ld", (long)result);
        NSInteger result2 = [CalculatorTmp add:result toNumber:15];
        NSLog(@"Result of class method: %ld", (long)result2);
        NSLog(@"Result of class method: %ld", [CalculatorTmp add:result2 toNumber:15]);

        // 인스턴스 메서드를 호출합니다.
        CalculatorTmp *calculator = [[CalculatorTmp alloc] init];
        [calculator setMemory:70];
        NSInteger newMemory = [calculator addToMemory:15];
        NSLog(@"New memory value after instance method call: %ld", (long)newMemory);
        newMemory = [calculator addToMemory:15];
        NSLog(@"New memory value after instance method call: %ld", (long)newMemory);
        NSLog(@"New memory value after instance method call: %ld", [calculator addToMemory:15]);
    }
}



// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

7. 실행 결과 예시

 

 결론적으로, '+'로 시작하는 클래스 메서드는 클래스 자체 연결되어 인스턴스를 생성하지 않고 호출할 수 있으며, '-'로 시작하는 인스턴스 메서드는 개별 인스턴스에 연결되어 해당 인스턴스를 통해 호출해야 합니다.

 

 

 

 

 

 

8. 추가로 더 공부해보러가기

 

https://growingsaja.tistory.com/894

 

 

 

+ Recent posts