ios도 모르고 하이브리드 앱 개발하기 [ 15 Xcode static 변수 / extern 변수 /  static 함수 ]




Objective c로 개발하다 보니 Java의 static 변수처럼 객체생성없이 가져다 사용할 변수가 필요한 경우가 있다.




Java의 static 변수는 클래스 내부에서 선언하며 선언된 static 변수는 클래스(객체) 초기화(생성) 없이 접근 가능한 장점이 있다.

1
2
3
4
5
6
7
8
9
Class TestClass {
    public static int code = "1";
}
 
Class ViewClass {
    public void funtion(){
        int textCode = TestClass.code;
    }
}
cs


static 변수를 클래스변수라고도 한다.





 

Objective c 에서는 static 변수가 존재하나 용도가 다르게 느껴진다.


static 변수를 만들면 Java 에서처럼 클래스로 접근하는 방법은 안된다는 내용의 글들을 많이 보았다.


단지 Objective c 에서 static 변수란 클래스(객체)를 여러개 초기화(생성)하더라도


static 변수의 값은 모두 공유한다는 의미로 사용되는 것 같다.



하지만 방법이 없지는 않다.


내가 찾아본 방법은 2가지가 있다.



첫번째는 외부 변수를 사용하는 방법이다.


extern 을 사용한 변수이다.


Objective c 의 extern 변수는 객체 없이 변수 단독으로 App 내부에서 사용된다.


Java 의 static 변수와 사용방법은 다르지만 그 쓰임세는 조금 더 비슷하다는 생각이 든다.


( g_ 로 시작하거나 global_ 로 암묵적으로 외부변수임을 알리기 위한 네이밍룰을 가지고 있는것 같다. )



두번째로 static 함수를 이용하는 방법이다.


Objective c 에서 static 함수는 제공해준다.


이는 Java와 같이 클래스(객체) 초기화(생성) 없이 접근이 가능한 함수이다.


static 변수 생성 후 변수의 getter 함수를 static 함수로 구현하면 객체 초기화 없이 Java 의 static 변수처럼 사용할 수 있다.



* 자세한 내용은 아래 (주소 참고)

Extern

Summary: Indicates that an identifier is defined elsewhere.

Details: http://tigcc.ticalc.org/doc/keywords.html#extern


Static

Summary (value): Preserves variable value to survive after its scope ends.

Summary (function): Effectively emits unnamed copies - useful for private functions in C, and can be used to escape multiple definition errors when used with inline functions.

Details: http://tigcc.ticalc.org/doc/keywords.html#static


출처 : http://stackoverflow.com/questions/11985307/static-extern-and-inline-in-objective-c




실제로 코딩해보자.

위 2가지 방법을 한번에 설명한다.




테스트용 파일을 생성해보자.

* 파일 생성하는 방법을 안다면 아래 설명은 건너띄고 맨 아래 코드작성하는 부분 참고



Xode 상단

File > New > File... 클릭





Header 파일먼저 생성해 보자.

Header File선택 후 Next





파일명은 자유롭게 주자.

나는 StaticController 이라고 했음

경로 잘 확인하고 Create 클릭





이제 구현 파일을 생성해 보자.

File > New > File... 클릭





Objective-C File 클릭 후 Next





파일명은 Header 파일과 동일하게 가자.

File명 입력 후 Next 클릭







경로 잘 확인하고 Create 클릭





그럼 아래처럼 파일 2개가 생성됬을 거야.





이제부터 파일내부 코드를 작성해 보자.


StaticController.h 파일

1
2
3
4
5
6
7
@interface StaticController : NSObject
 
extern int global_code;
 
+ (int)getStaticCode;
 
@end
cs

3# : 외부 변수 선언

5# : static 함수 선언, static 변수의 getter 함수이다.



StaticController.m 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#import <Foundation/Foundation.h>
#import "StaticController.h"
 
@implementation StaticController
 
int global_code = 1111;
 
static int _STATIC_CODE= 2222;
 
+ (int)getStaticCode{
    return _STATIC_CODE;
}
 
@end
cs

6# : 외부 변수의 선언

8# : static 변수의 선언

10# : static 함수의 선언이다. 보통 함수는 시작하는 기호가 - 인데 반해 static 함수는 + 로 시작한다.



ViewController.m 파일

ViewController 의 viewDidLoad 함수 내부에서 사용함

1
2
3
4
5
6
7
- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSLog(@"global static code : %d" , global_code);
    
    NSLog(@"static code : %d" , [StaticController getStaticCode]);
}
cs

4# : 외부변수의 사용방법

6# : static 함수를 이용한 사용방법



결과 









 * 경고


IOS에 무지한 상태에서 구글링만으로 앱 개발 및 포스팅이 진행됨


누구나 따라할 수 있겠지만 결코 완벽한 정답이 아닐 수 있음


아주 주관적인 입장에서의 포스팅임



'mobile > ios' 카테고리의 다른 글

ios | ios도 모르고 하이브리드 앱 개발하기 [ 20 키체인에서 인증서는 언제 유효해 질까? ]  (0) 2016.10.07
ios | ios도 모르고 하이브리드 앱 개발하기 [ 19 Provisioning 설정 후 Unable to install "project name" 에러 ]  (0) 2016.10.07
ios | ios도 모르고 하이브리드 앱 개발하기 [ 18 아이폰으로 테스트 하기 / Xcode에 아이폰 연결 / 디바이스 테스트 ]  (6) 2016.10.04
ios | ios도 모르고 하이브리드 앱 개발하기 [ 17 아이폰 해상도별 storyboard 설정 / 디바이스 해상도 설정 ]  (0) 2016.10.04
ios | ios도 모르고 하이브리드 앱 개발하기 [ 16 Xcode 에서 아이콘 수정 (변경) / Asset Catalog Creator Free ]  (0) 2016.09.23
ios | ios도 모르고 하이브리드 앱 개발하기 [ 15 Xcode static 변수 / extern 변수 / static 함수 ]  (0) 2016.09.22
ios | ios도 모르고 하이브리드 앱 개발하기 [ 14 AppDelegate에서 ViewController 사용하기 / AppDelegate란 ]  (2) 2016.09.21
ios | ios도 모르고 하이브리드 앱 개발하기 [ 13 NSUserDefaults 사용하여 데이터 저장하고 읽기 ]  (0) 2016.09.19
ios | ios도 모르고 하이브리드 앱 개발하기 [ 12 webview에서 네트워크 체크하기 ]  (0) 2016.09.19
ios | ios도 모르고 하이브리드 앱 개발하기 [ 11 webview와 javascript간의 상호 호출하기 ]  (0) 2016.09.19
ios | ios도 모르고 하이브리드 앱 개발하기 [ 10 인터넷 체크 / 네트워크 체크 ]  (2) 2016.09.19
by 개발자 CofS 2016.09.22 14:15