ㄷㅣㅆㅣ's Amusement

[iOS/Objective-c]NSArray vs NSMutableArray 잘 사용하고 계신가요? 본문

Programming/iOS

[iOS/Objective-c]NSArray vs NSMutableArray 잘 사용하고 계신가요?

ㄷㅣㅆㅣ 2015. 11. 19. 21:40

[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 allocinit];
    NSSet *menuSet = [[NSSet allocinit];
    NSDictionary *menuDic = [[NSDictionary allocinit];
}
cs

  매우 맞다. 정말 맞다. 아주 맞다. 그러나 귀찮다. 게다가, mutable인 경우에는 어떠한가? 아마도 다음과 같이 코딩할 것이다.

1
2
3
4
5
6
7
- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSMutableArray *menuBtns = [[[NSArray allocinit] mutableCopy];
    NSMutableSet *menuSet = [[[NSSet allocinit] mutableCopy];
    NSMutableDictionary *menuDic = [[[NSDictionary allocinit] 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등). 일단 다 해제해놨는데... 일부 환경에서는 안될수도 있습니다. 

그리고... 광고는 안눌러도 되는데 공감버튼 한번씩 부탁드려요~ 로그인 필요 없어요~~

반응형
Comments