본문 바로가기

iOS/Objective-C

Objective-C) Swift 개발자를 위한 Objective-C (2) - .m 파일 살펴 보기

 

안녕하세여? 소들입니다 :)) 투턱 투척

여름 휴가를 즐기며 제 얼마 안 되는(?) 포스팅을 쭉 읽었는데

왤케 1탄만 투척하고 끝맺음 안 한 게 많은지 OTL... 

얼른 하나하나 닫아준단 개념으로 포스팅 해봅니다..

 

 

오늘은 

Objective-C 뿌수기 2편.. !!!!

1편 안보신 분은Swift 개발자를 위한 옵젝씨 1편 보고 오심이

 

저번 헤더 파일 살피는 것에서 어떤 것을 공부했냐면..

 

#import

@interface

전역변수 vs 프로퍼티

메서드 선언

상속

 

 

뭐 등등..

이런 거에 대해서 공부했어염 

이번에는 구현부 파일엔 어떤 것이 있고

어떻게 사용하는지에 대해 공부해 봅시다 :))

 

 

 

 

1. ViewController.m을 살펴보자

 

 

#import "ViewController.h"
 
@interface ViewController : UIViewController
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
}
 
@end
 

 

 

처음  viewController가 생성되면 .m 파일엔 이런 것들이 있음

하나하나씩 살펴보자 👀

 

 

 

 1-1. #import 

 

 

이건 1탄에서 설명한 것과 같은 기능임

근데 .m 파일에선 (헤더 파일이 있다면) 자신의 헤더 파일을 무조건 import 하고 있어야 함

또한, 만약 헤더 파일에서 import한 것은 .m 파일에서 import 할 필요 없음

 

 

 

 

 1-2. @interface , @end 

형이 여기서 왜 나와..? 🌸

1편에서 등장한 @interface가 .m 파일에도 똑같이 등장 했다고 생각 하겠지만,

실제로는 다름!!! 여기서 등장한 interface는 익명 카테고리로, Extension임!

따라서 프로퍼티나 인스턴스 변수를 Private로 선언하고 싶을 때 여기다 선언함!

 

이 부분에 대해 자세히 알고 싶다면 이 포스팅을 참조하셈~_~

 

 

 

 

 1-3. @implementation , @end 

 

interface와 마찬가지로 implementation이 끝나는 곳엔 @end가 있어야 함!

@implementation에서 시작해서 @end가 등장하기 전까지가  implementation field 로, 구현부에 해당하기 때문

 

이제 이 곳에 메서드를 직접 구현하는 것임

 

@interface ~ @end @implementation field ~ @end
선언부 구현부
외부에서 사용할 메서드 이름, 인스턴스 변수, property 선언 메서드 구현

 

 

 

 1-4. 메서드 구현

 

 

이제 구현부 안에 원하는 메서드를 구현하면 됨

메서드 구현 문법 및 옵젝씨 간단한 문법은 추후 포스팅 하겠음!!

 

구현부는 매우 간단해 보인다!!!!!!!!!!

왜냐!!!!!!! 중요한건 메서드를 어떻게 구현하냐니까 :)

 

자 다 살펴본 것 같지만,,

아직 한 발 남았다..

 

 

 

 1-5. synthesize 

 

넌 뭐니..?

 

@synthesize라는 놈이

구현부 내에 이렇게 끼어있는 것을 꽤 볼 수 있음

 

[ˈsɪnθəsaɪz]

신thㅓ사이즈

 

 

마지막으로 이 놈에 대해 알아보자..!!

 

자 이놈에 대해 알고 싶다면, 먼저 프로퍼티에 대해 알아야 함

프로퍼티 라는 놈은 선언부 (interface field)에서 선언한다 했잖음?!

 

 

이런 식으루 말이지

근데 이제 이 프로퍼티를 내가 구현부의 메서드 내에서 쓸라구 하면 말이셈

 

 

 

 

오류가 난단 말이셈

무슨 오류냐면 말이셈

 

 

 

 

name이 정의되어 있지 않으니, _name으로 대체하라넹??

Fix를 눌러보면

 

 

 

 

??

프로퍼티 명 앞에 _가 붙더니 에러가 사라짐

 

사실 이름 앞에 _를 붙이지 않더라도

self를 통해 접근하면 

 

 

 

접근 가능함 뭘까? 👀

 

 

자, 프로퍼티의 특성임!!!!!!!1

 

프로퍼티는 선언부에 선언한 이름을

구현부에서 그대로 접근할 수 없음

 

 

따라서 다음과 같이 사용해야 함

 

 

 

 

프로퍼티명 앞에 _를 붙이거나 self를 통해 접근 하거나

 

근데 만약 나는 _를 없애고 사용하고 싶어!!!11

그럼 이럴 때 사용하는 게 머다?

synthesize 다!!

 

 

synthesize를 이용하면

선언부에 선언된 이름 그대로 접근이 가능하게 해줌

 

 

 

 

자 구현부에 이렇게 @synthesize를 쓰고 프로퍼티명을 쓰면,

 

 

 

 

 이런 식으로 _를 붙이거나 self.를 통하지 않아도

프로퍼티 name에 그대로 접근할 수 있음!!!

 

근데 한 가지 유의점은!!!

synthesize를 쓰면

 

 

 

 

더이상

_로는 접근 못함

 

 

 

 

self로는 가능!

 

.

.

 

자 정리하자면

 

 

Synthesize 선언 전 Synthesize 선언 후
_name name
self.name

 

 

synthesize를 쓰면 이렇게 되는 것임!!

 

참고로 위 내용은 프로퍼티 한정임

멤버 변수는 상관 없음

 

 

 

이 부분 또한 자세히 알고 싶다면 이 포스팅을 참조 하시오!

 

 

 

.

.

.

 

자 오늘은 옵젝씨 ㅣ뿌수기 2편 :)

여러분은 이제 옵젝씨 .m 파일도 읽을 수 있게 되었읍니다 짞짞

다음번엔 간단한 메서드 문법과, 객체 생성 및 접근 등등에 대해 다루겠음!!!!!!!

 

바바이 :D



Calendar
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
최근 댓글
Visits
Today
Yesterday