2016. 9. 22. 14:15ㆍmobile/ios
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에 무지한 상태에서 구글링만으로 앱 개발 및 포스팅이 진행됨 누구나 따라할 수 있겠지만 결코 완벽한 정답이 아닐 수 있음 아주 주관적인 입장에서의 포스팅임 |