1. 사전 프로젝트 코드 세팅하고 오기
https://growingsaja.tistory.com/869
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
'Development > iOS' 카테고리의 다른 글
[Objective-C] 입문하기 - 06 : Array 기본 사용 예제 및 NSMutableArray 가변 배열 관련 &배열 중복값 제거 실습 (0) | 2023.06.23 |
---|---|
[Objective-C] 입문하기 - 05 : property 프로퍼티 사용해 변수 선언 및 get , set 데이터 지정 및 호출 실습 (0) | 2023.06.22 |
[Objective-C] 프로젝트 기본 세팅 소스코드 예시 (0) | 2023.06.15 |
[Objective-C] 입문하기 - 03 : 버튼 만들고, 누르면 alert 창 뜨게 하는 앱 만들기 (0) | 2023.06.15 |
[Objective-C] 입문하기 - 02 : Hello World를 출력하는 앱 만들기 (0) | 2023.06.14 |