[Objective-C] .h와 .m 파일의 연결성
Xcode에서 obj-C 프로젝트간의 연결성과 씬 뒤에 숨겨진 코드를 이해하는 것이 중요하다. 클래스의 public이랑 private한 파트를 나누는데 사용이 됨. .h는 헤더 파일로 마치 API처럼 클래스의 public 선언을 하는 파일이고, .m파일은 비공개되는 구현을 함.
다른 파일에서 함수를 호출하려고 할 때 참조를 위해 .h 파일을 import 해와야 한다.
#import <Foundation/Foundation.h>
.h 파일에서 public @property를 클래스에 선언할 수 있음.
@property (strong, nonatomic) NSString *something;
이 @property는 NSString 클래스 오브젝트의 포인터. 모든 오브젝트는 힙에 있으므로 이 있어야함. 별개로 이 의 뜻은 오브젝트 포인트를 프로퍼티가 nil로 설정되기 전까지 메모리에 유지하라는 뜻. nonatomic은 이 프로퍼티에 접근하는 것이 스레드 세이프하지 않다는 것. nonatomic이 아니면 컴파일러가 코드 잠금을 만들 것.
.m 파일은 이 프로퍼티의 게터와 세터 메서드가 씬 뒤에서 자동적으로 생성해서 @property의 인스턴스를 접근가능하게 만듬.
@synthsize something = _somthing;
- (NSString *) something
{
return _something;
}
- (void)setSomething:(NSString *)something
{
_something = something;
}
기본적으로 지원(backing) 변수 이름은 프로퍼티 이름과 동일하고 앞에 언더스코어(_)를 붙인 형태. 메서드를 오버라이드해서 다른 걸 하는 게 아니라면 위 코드를 작성할 필요는 없음.
새로운 메서드를 작성할 때는 .h 파일 안에 선언을 두어야함.
- (int)newMethod:(ArgType *)arg;
그리고 실제 자세한 부분은 .m 파일에 작성.
- (int)newMethod:(ArgType *)arg
{
int num = 0;
# something in the method...
return num;
}
비공개로 선언할 때 .m 파일 안에 이런 식으로 작성.
@interface Something()
#private declarations....
@end
다른 코드를 처음으로 읽을 때 .h 파일을 보고 프로젝트의 개요를 볼 수 있음. 자세하게 보려면 .m 파일.
본 글은 아래 글의 번역, 요약 글입니다.
* 개인 개발 블로그에 올린 내용이기도 합니다.
Connection between .h and .m files in Objective-C
When first open an objective-C project in X-code, the .h and .m files look confusing. It is important to understand the simple connections…
victorleungtw.medium.com
오늘도 읽어주셔서 감사합니다.
궁금하거나 나누고 싶은 얘기가 있으시면 댓글로 알려주세요!
재밌게 읽으셨다면 공감과 구독은 큰 힘이 됩니다.
항상 감사합니다.