ㄷㅣㅆㅣ's Amusement
[iOS/Objective-c]NSArray vs NSMutableArray 잘 사용하고 계신가요? 본문
[iOS/Objective-c]NSArray vs NSMutableArray 잘 사용하고 계신가요?
오늘은 간단한데 오래 전부터 objective-c를 썼던 사람이나, 6개월 미만의 사람들이 자주 하게되는 이상한(?)코딩에 대해서 포스팅한다.
1. 간단한 초기화
- NSArray, NSSet, NSDictionary를 초기화 할때에 옛날 개발자들이나, 아니면 옛날 책을 가지고 공부한 사람들은 대부분 다음과 같이 한다.
1 2 3 4 5 6 7 | - (void)viewDidLoad { [super viewDidLoad]; NSArray *menuBtns = [[NSArray alloc] init]; NSSet *menuSet = [[NSSet alloc] init]; NSDictionary *menuDic = [[NSDictionary alloc] init]; } | cs |
매우 맞다. 정말 맞다. 아주 맞다. 그러나 귀찮다. 게다가, mutable인 경우에는 어떠한가? 아마도 다음과 같이 코딩할 것이다.
1 2 3 4 5 6 7 | - (void)viewDidLoad { [super viewDidLoad]; NSMutableArray *menuBtns = [[[NSArray alloc] init] mutableCopy]; NSMutableSet *menuSet = [[[NSSet alloc] init] mutableCopy]; NSMutableDictionary *menuDic = [[[NSDictionary alloc] init] mutableCopy]; } | cs |
어플을 만드는 주 목적도 귀찮음을 제거하는 것이 아니겠는가?? 과감하게 다음과 같이 바꿔보자.
1 2 3 4 5 6 7 | - (void)viewDidLoad { [super viewDidLoad]; NSArray *menuBtns = [NSArray array]; NSSet *menuSet = [NSSet set]; NSDictionary *menuDic = [NSDictionary dictionary]; } | cs |
물론 mutable도 한방에 다 된다. 확실히 우아하고 간결하다.
1 2 3 4 5 6 7 | - (void)viewDidLoad { [super viewDidLoad]; NSMutableArray *menuBtns = [NSMutableArray array]; NSMutableSet *menuSet = [NSMutableSet set]; NSMutableDictionary *menuDic = [NSMutableDictionary dictionary]; } | cs |
!!! 덧. 개인이 만든 클래스도 PersonalClass * pc = [[PersonalClass alloc] init]; 하지 말고 [PersonalClass new]로 간단히 !!!
2. mutable은 왜쓰지??
1 2 3 4 5 6 7 8 9 | - (void)viewDidLoad { [super viewDidLoad]; NSMutableArray *menuBtns = [NSMutableArray array]; [menuBtns addObject:@"A"]; [menuBtns addObject:@"B"]; [menuBtns addObject:@"C"]; [menuBtns addObject:@"D"]; } | cs |
- 당연히 이것도 맞다. 아주 맞다. 정말 맞다. 이후에도 추가/삭제될 여지가 있는 경우라면 이렇게 쓴다한들 무엇이 문제이겠는가? 그러나 메뉴같은 것들은 그 갯수가 정해져있는 경우가 많은데 mutable로 쓸 이유도 없을 뿐더러, 코드도 쓸데없이 반복된다. 과감하게 다음과 같이 바꿔보자.
1 2 3 4 5 | - (void)viewDidLoad { [super viewDidLoad]; NSArray *menuBtns = [@"A", @"B", @"C", @"D"]; } | cs |
우아하고 간결하다. 나중에 다른 부분에서 수정이 불가능하게끔 lock도 되었다. 더이상의 코드 반복도 없다. 가독성도 좋다. 다함께 과감히 바꿔보자.
혹시 코드가 복/붙이 안되면 댓글 달아주세요(사용하는 브라우저와 OS등). 일단 다 해제해놨는데... 일부 환경에서는 안될수도 있습니다.
그리고... 광고는 안눌러도 되는데 공감버튼 한번씩 부탁드려요~ 로그인 필요 없어요~~
'Programming > iOS' 카테고리의 다른 글
[iOS/Objective-c] UIButton background color 설정하기. (6) | 2015.11.30 |
---|---|
[iOS/Objective-c] Touch Id 사용하여 인증하기. (passcode도 동작) (0) | 2015.11.25 |
iOS/Objective-c, code block 내에서 self 다루기 (2) | 2015.11.19 |
iOS calendar program tutorial (0) | 2015.11.10 |
Objective-c Category에도 overriding이 가능?? (0) | 2015.11.07 |