투케이2K

26. (Objective-C/objc) instancetype 사용해 클래스 생성자 초기화 실시 본문

Objective-C

26. (Objective-C/objc) instancetype 사용해 클래스 생성자 초기화 실시

투케이2K 2022. 2. 28. 12:17

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : OBJECTIVE-C

 

[ViewController.m : 클래스 생성자 호출]

// MARK: - [뷰 로드 실시]
- (void)viewDidLoad {
    [super viewDidLoad];
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> viewDidLoad() :: 뷰 로드 실시] \n");
    printf("=============================== \n");
    printf("\n");
    
    
    // MARK: [클래스 생성자 초기화 및 메소드 호출 실시]
    // MARK: [사전 헤더 파일 import 필요 : #import "TestClass.h"]
    
    
    // [데이터 삽입 클래스 생성자 초기화 실시]
    TestClass *ts = [[TestClass alloc] initName:@"투케이2K"
                                       initAge:@29];
    
    NSString *result = ts.formatInfo; // [메소드 호출]
    
    printf("\n");
    printf("=============================== \n");
    printf("[데이터 삽입 클래스 생성자 초기화 :: %s] \n", result.description.UTF8String);
    printf("=============================== \n");
    printf("\n");
}
 

[TestClass.h : 헤더 정의]

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>


// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. TestClass (선언부)
2. 전역변수 , 메소드 , 인스턴스변수 (클래스 생성자) 등 선언
// -----------------------------------------
*/



// -----------------------------------------
/*
MARK: [요약 설명]
 1. property (프로퍼티 정의)
   - 클래스의 속성이나 설정을 지정하는 것입니다
   - 변수 , 메소드 등을 선언해서 사용할 수 있습니다
 
 2. strong (프로퍼티 속성)
   - 객체 소유 (사용자 및 다른 개체가 같은 strong 속성으로 재선언 하지 않는 이상 파괴되지 않음)

 3. nonatomic (프로퍼티 속성)
   - 멀티 스레드 환경에는 작동 안하게 설정
 
 4. instancetype
   - 클래스 생성자 초기화 시 return type 이 선언한 class object 와 일치하도록 해줍니다
*/
// -----------------------------------------



// -----------------------------------------
// [클래스 내부 함수로 구현 실시]
@interface TestClass : NSObject


// [프로퍼티 정의 실시]
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSNumber *age;


// [instancetype 사용해 클래스 생성자 초기화]
- (instancetype) initName: (NSString *)nameData
                 initAge: (NSNumber *)ageData;


// [리턴 반환 메소드 선언 실시]
- (NSString *) formatInfo;

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

[TestClass.m : 몸체 구현]

#import <Foundation/Foundation.h>


// MARK: - [헤더 파일 imort]
// -----------------------------------------
#import "TestClass.h"
// -----------------------------------------



// MARK: - [몸체 [구현부] 정의]
// -----------------------------------------
@implementation TestClass
// -----------------------------------------



// MARK: - [클래스 생성자 초기화 정의]
- (instancetype) initName:(NSString *)nameData
                  initAge:(NSNumber *)ageData {
    self = [super init];
    if (self != nil){
        
        // [프로퍼티 변수에 데이터 삽입 시 (_) 사용]
        _name = nameData;
        _age = ageData;
    }
    return self;
}



// MARK: - [변수값 리턴 반환 메소드 구현 실시]
- (NSString *) formatInfo {
    
    // [변수 값을 포맷해서 리턴 NSString 에 담고 반환 실시]
    return [NSString stringWithFormat:@"이름 : %@ , 나이 : %@", _name, _age];
}


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

[결과 출력]

 

 

반응형
Comments