앱 개발 시에 Singleton 패턴 이라는 이야기를 자주 듣게 되는데 널리 쓰이는 만큼 한번 배워 놓으면 써먹을 데가 많다.

위키 백과에서의 싱글톤 패턴에 대한 정의는 아래와 같다.

소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 
생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 
최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다.


쉽게 생각해서 여러 클래스에서 공통적으로 자주 쓰이는 인스턴스들을 필요할 때마다 

매번 초기화 할 필요 없이 한번 초기화 된 인스턴스를 불러온다는 것이다.

필요할 때마다 매번 인스턴스를 생성한다는 것은 시스템 자원의 낭비를 가져온다.


예제를 하나 들자면 아래 내용은 실제 네트워크를 통해 앱에서 Database에 엑세스 할때 주로 사용하였다.

Singleton.h 헤더 파일
@interface Singleton : NSObject

+ (NSString *) getBaseURL;
+ (NSString *) getProfileImageBaseURL;

@end

Singleton.m 구현 파일 @implementation Singleton + (NSString *) getBaseURL { static NSString * const BaseURLString = @"http://서버 주소"; return BaseURLString; } + (NSString *) getProfileImageBaseURL { static NSString * const BaseURLString = @"http://이미지 파일이 저장된 서버 주소"; return BaseURLString; } @end

이렇게 자주 쓰일 URL을 미리 선언 해 놓은 후


싱글톤 패턴 활용
#import "Singleton.h"

NSString *urlStr = [NSString stringWithFormat:@"%@/login_check.php",[Singleton getBaseURL]];
NSString *imageurlStr = [NSString stringWithFormat:@"%@/get_image.php",[Singleton getProfileImageBaseURL]];

이런 식으로 필요할 때마다 불러와서 사용하면 된다.


만약에 싱글톤 패턴을 사용하지 않고 필요할 때마다 인스턴스를 만들어서 사용을 한다면

기존 URL 값이 바뀌어야만 하는 상황이 생겼을 때 생성했던 모든 인스턴스를 찾아서 

각각 수정해줘야 하기 때문에 효율성 측면에서 추천하지 않는 방법이다.


'프로그래밍 > iOS - OBJC' 카테고리의 다른 글

iOS NSTimer 호출하기  (1) 2016.05.12
맥 OS X PhoneGap 설치  (0) 2016.04.27
iOS에서 위치정보 사용 동의 받기  (0) 2016.03.10
iOS 8에서 푸시 알림 동의 받기  (0) 2016.03.10
iOS 앱 자동로그인  (0) 2016.03.09

프로젝트 진행 중에 처음에는 없던 자동로그인 기능 구현이 결정되었다.

최대한 간단하게 구현하려고 노력했으며 실제로 그렇게 되었다고 본다.


바로 NSUserDefaults 를 이용한 방법인데 LoginState, Autologin 이라는 NSUserDefault를 선언하고

LoginState는 YES/NO 값을 가지고 ID와 PW를 스트링으로 저장하여 다음 앱 실행 시 활용하였다.


앱 메인에 로그인 유지를 선택 할 수 있는 체크박스를 만들어 놓은 후

if (autoLoginChecked) { // 자동로그인 체크 NSUserDefaults *autologin = [NSUserDefaults standardUserDefaults]; [autologin setObject:@"yes" forKey:@"loginstate"]; // 자동로그인 State를 yes로 저장 [autologin setObject:userID.text forKey:@"userid"]; // User ID 필드 값 저장 [autologin setObject:userPass.text forKey:@"pass"]; // User PW 필드 값 저장 [autologin synchronize]; }

이렇게 설정을 해 놓은 후 다음 앱 실행 시 loginstate 의 키 값이 yes냐 no냐에 따라서 분기를 주면 된다.

사용자 로그아웃 시에는 loginstate를 no로 바꾸고 synchronize를 해주면 간단하다.


'프로그래밍 > iOS - OBJC' 카테고리의 다른 글

iOS NSTimer 호출하기  (1) 2016.05.12
맥 OS X PhoneGap 설치  (0) 2016.04.27
iOS에서 위치정보 사용 동의 받기  (0) 2016.03.10
iOS 8에서 푸시 알림 동의 받기  (0) 2016.03.10
Singleton 패턴 사용하기  (0) 2016.03.09


 Apple MDM



MDM 이란 Mobile Device Management의 약자로 기업, 교육 기관 등의 단체에서 

앱을 배포하고 모바일 기기들을 관리하기 위한 솔루션입니다.

개발자 계정은 엔터프라이즈 계정(379,000원 / 1년)을 보유 하여야 하며 

MDM Vendor 인증서 등의 추가 인증서 발급 작업이 필요합니다. 


iOS의 경우 MDM 서버 구축 -> MDM 서버 정보를 포함한 Profile을 생성

 -> 사용자가 Profile 설치(Device Management 허용) -> MDM 서버에 기기 등록의 과정이 선행되어야 합니다.


그 후, MDM 서버에서 MDM 커맨드를 iOS에 푸쉬를 하고 iOS가 MDM 서버와 연결되어 정의된 기능들을 수행합니다.


이번 프로젝트는 학생들을 대상으로 서비스 중인 안심 알리미 앱을 수업시간 화면잠금 등의 기능제한을 적용하기 위해 

기존 앱에 MDM 솔루션을 적용하기 위해 시작되었습니다.


MDM 서버는 ubuntu server 14.04 버전을 사용하였고, 리눅스를 처음 써 보는 제가 국내에서 자료를 찾기 힘든

MDM 솔루션을 구축하면서 겪는 시행 착오와 해결 방향을 기록해 나갈 예정입니다.




+ Recent posts