Objective-C

3. [Objective C] Class(2)

Daesiker 2021. 1. 26. 11:37
반응형

3-1 MyClass.h

#import <Foundation/Foundation.h>

@interface MyClass : NSObject
//instance 선언
{
    int         myAge;
    NSString    *myName;
    NSString    *mySubject;
}

//property 선언
@property (nonatomic, assign)   int         myAge;
@property (nonatomic, retain)   NSString    *mySubject;
@property (nonatomic, retain)   NSString    *myName;

//instance Method 선언
- (void) myFirstMethod;
- (void) setMySubject:(NSString *)subject;
- (NSString *) getMySubject;

//class Method 선언
+ (void) classMethod;


@end

저번 시간에 클래스를 선언하는 .h파일에 대해 공부를 했다. 이번엔 선언한 파일에 대해 어떻게 구현할지를 정의하는 .m파일에 대해 알아볼 예정이다.


3-2 MyClass.m

—Class 구현문 선언

#import "MyClass.h" //원하는 클래스 헤더 import

@implementation MyClass

//insert Here...

@end

#import 구문에서 헤더파일을 가져온다.

@implementation ~ @end 구문에 구현문을 기술하면 된다.

—@synthesize

#import "MyClass.h" //원하는 클래스 헤더 import

@implementation MyClass
//프로퍼티 구현
@synthesize myAge, mySubject, myName;

@end

@property를 사용해서 프로퍼티들에 대한 getter와 setter을 선었했으면 @implementation에서 실제 코드를 추가해주어야 한다. @property를 사용한 것은 단지 컴파일러가 @interface에 getter와 setter메서드가 작성되었다는 것을 알려주는 거고 실제 구현코드에서 @synthesize 지시어를 통해 지정해야 사용이 가능하다.

@synthesize에서는 변수명만 기재하면 된다.

—Instance Method

#import "MyClass.h" //원하는 클래스 헤더 import

@implementation MyClass
//프로퍼티 구현
@synthesize myAge, mySubject, myName;

//instance Method 구현

//호출되면 로그를 남기는 메서드
- (void) myFirstMethod {
    NSLog(@"It is instance method");
}

//mySubject 인스턴스를 설정하는 메서드(setter)
- (void) setMySubject:(NSString *)subject {
    mySubject = [NSString stringWithString:subject];
}

//mySubject 인스턴스를 가져오는 메서드(getter)
- (NSString *) getMySubject {
    return mySubject;
}


@end

→ MyClass.h 파일에 선언된 instanceMethod에 대해서 구현 방식을 설정한다.

→ setter 방식의 setMySubject와 getter방식의 getMysubject 구현

→ setMySubject : mySubject의 값 변경

→ getMySubject : mySubject 값 리턴

❗우리는 Property 속성에 read / write 속성에 아무 값도 넣지 않았으므로 이 함수들은 읽기 쓰기가 모두 가능은 하다.

—Class Method

#import "MyClass.h" //원하는 클래스 헤더 import

@implementation MyClass
//프로퍼티 구현
@synthesize myAge, mySubject, myName;

//instance Method 구현

//호출되면 로그를 남기는 메서드
- (void) myFirstMethod {
    NSLog(@"It is instance method");
}

//mySubject 인스턴스를 설정하는 메서드(setter)
- (void) setMySubject:(NSString *)subject {
    mySubject = [NSString stringWithString:subject];
}

//mySubject 인스턴스를 가져오는 메서드(getter)
- (NSString *) getMySubject {
    return mySubject;
}

//class Method 구현
//로그 출력 함수
+ (void) classMethod {
    NSLog(@"It is class Method");
}

@end


3-3 main.m

#import <Foundation/Foundation.h>
#import "MyClass.h"
int main(int argc, const char * argv[]) {
    
    @autoreleasepool {
        //클래스 메서드는 초기화 하지않고 메서드를 호출할 수 있다.
        [MyClass classMethod];
        
        //MyClass의 인스턴스란 객체를 생성하고 초기화한다.
        MyClass *instance = [[MyClass alloc] init];
        
        //인스턴스의 인스턴스 변수인 myName을 세팅
        [instance setMyName:@"daesik"];
        
        //세팅된 myName을 name이라는 새로운 변수에 넣어준다.
        NSString *name = [instance myName];
        NSLog(@"My name is %@.", name);
        
        //mySubject를 세팅
        [instance setMySubject:@"Programing"];
        NSLog(@"My subject is %@.", [instance getMySubject]);
        
    }
    return 0;
}

—console

앞에서 설명 했듯이 class Method인 classMethod 함수는 객체를 생성하기 전에도 호출 할 수 있는걸 알 수 있다.

💡
객체 생성 방법 클래스명 *변수명 = [[클래스명 속성] init];

여기서 alloc이란 속성은 함수내에서 일시적인 생성할 객체를 사용할 경우에 사용한다. 메모리 관리를 위해 사용하는 속성이다.

💡
객체 안의 instance 변경 1. setter함수로 접근 [객체명 setter함수:데이터] 2. 직접 접근 객체명.인스턴스 = 데이터
💡
객체안의 instance 접근 [객체명 instance]


3-4 마치며...

Object C 클래스에 대한 내용을 완전 자세하고 세밀하게 학습하지는 않았지만 어떤 식으로 흐르는 지와 다른 개발자가 만든 클래스를 보고 어떤 식의 흐름을 가지고 있는지는 알 수 있을 정도의 지식은 습득한 것 같다. 다음 포스팅 때는 함수에 관한 내용을 포스팅할 예정이다.

반응형

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

4.[Objective-C] Function(함수)  (0) 2021.01.27
2. [Objective-C] Class(1) Property  (0) 2021.01.26
1. [Objective-C] NSLog, 변수  (0) 2021.01.25