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 함수는 객체를 생성하기 전에도 호출 할 수 있는걸 알 수 있다.
여기서 alloc이란 속성은 함수내에서 일시적인 생성할 객체를 사용할 경우에 사용한다. 메모리 관리를 위해 사용하는 속성이다.
3-4 마치며...
Object C 클래스에 대한 내용을 완전 자세하고 세밀하게 학습하지는 않았지만 어떤 식으로 흐르는 지와 다른 개발자가 만든 클래스를 보고 어떤 식의 흐름을 가지고 있는지는 알 수 있을 정도의 지식은 습득한 것 같다. 다음 포스팅 때는 함수에 관한 내용을 포스팅할 예정이다.
Uploaded by Notion2Tistory v1.1.0