오늘의 주제
1. NSDictionary, NSMutableDictionary
2. NSArray, NSMutableArray
열 한번째 시간입니다.^^
지난 번에는 상속이라는 또 하나의 중요한 개념에 대하여 알아보았습니다.
이번에는 Objective-C에서 가장 흔하고 많이 쓰이는 클래스 중에 자료를 보관할 수 있는 녀석들에 대해 알아보도록 하려고 합니다.
딕셔너리랑 배열인데요, 한 번 봅시다~
어휴~ 봄감기 때문에 아주 죽겠네요+_+
# NSArray
배열이란???
C를 배운 분들이라면 배열을 아실겁니다 ㅎ
하지만 여기서 말하는 녀석은 메소드까지 가지고 있는 클래스 입니다. 단순한 자료형이 아니죠~
뭐 약간의 사용개념을 보면 C의 Linked-List(연결 리스트)와 비슷하다고 생각하시면 되겠습니다~!
일단 아래 발로그린 배열을 보시죠..ㅋㅋㅋ
배열입니다.
C에서의 배열과는 달리 이녀석에는 어떠한 객체도 들어갈 수 있습니다.
C의 배열에서는 int형 배열이라면 저장되는 녀석들이 전부 int형이지만, Objective-C의 Array에는 객체 형태라면 무엇이든 들어갈 수 있습니다.
위의 그림의 배열에는 index 0번에 NSString의 객체가 들어가 있고 1번에 NSNumber의 객체가 들어가 있습니다. 그 뒤에 또 어떤 객체들이 들어올 수도 있습니다.
Objective-C에서 이렇게 index번호로 쭈욱 연결되 있는 녀석을 우리는 Array라고 칭합니다.
이와 같은 배열 클래스는 크게 두 가지로 볼 수 있는데요,
처음 생성시 배열을 만들어 주고 수정, 삭제가 불가능한 NSArray.
그리고 생성 후에 추가, 수정, 삭제가 자유로운 NSMutableArray가 있습니다.
NSMutableArray는 NSArray를 상속받아 사용하기 때문에 NSArray의 모든 메소드를 사용할 수 있으며 추가적으로 추가, 수정, 삭제 메소드가 있습니다.
자세한 설명은 저 아래에서 다시 할게요~
잠깐,,! 상속을 모르신다구요? 그럼 알고 넘어갑시다^^
2012/03/28 - [Objective-C] - Objective C <9>. 상속(1)
2012/04/10 - [Objective-C] - Objective C <10>. 상속(2) - 오버라이딩
# NSDictionary
딕셔너리란???
우리말로 하면 사전이라는 뜻이죠~
우리는 사전에서 무엇인가를 찾고자 할때, 해당하는 단어를 찾고, 그 단어를 찾아가서 그에 해당하는 내용을 가져오죠.
여기서의 딕셔너리도 마찬가지입니다.
여러 자료들을 하나의 딕셔너리에 넣어놓고 우리가 원하는 자료를 꺼내오고 싶을 때, 우리가 딕셔너리를 생성할 때 부여해준 key라는 녀석으로 검색을 하여 꺼내옵니다.
여기 아래의 허접한 그림을 함께 보시죠 ㅋㅋㅋ
위의 그림의 딕셔너리에는 세 개의 객체가 들어가 있습니다.
NSString의 객체는 name이라는 key값을 가지고 있고, NSNumber의 객체는 number라는 key값을 가지고 있습니다.
그리고 NSArray의 객체는 array라는 key값을 가지고 있네요.
이처럼 딕셔너리에는 다양한 종류의 객체가 들어가 있을 수 있으며, 각각의 객체는 고유한 key값을 가지고 있습니다.
그렇기 때문에 우리가 사전에서 어떤 단어를 찾아서 그 의미를 해석해 낼 수 있듯이, 컴퓨터는 딕셔너리 안에서 키값으로 원하는 자료를 찾아올 수 있는 것입니다.
즉, Array는 index 값으로 자료를 꺼내올 수 있지만, 딕셔너리는 index값이 없는 대신 key 값으로 자료를 꺼내올 수 있습니다.
딕셔너리도 배열과 마찬가지로 NSDictionary와 NSMutableDictionary로 나뉠 수 있습니다.
두 개의 차이점은 위에서 말씀드렸으니 아시겠죠?ㅎ
이렇게 자료들을 편하게 보관할 수 있는 두 클래스를 알아보았습니다.
그렇다면 이제 예제를 통해 익혀보도록 해요~
# 실습해보기
새로운 프로젝트를 만들어 봅시다~
요로코롬 만들어 줍니다~
그리고 코드를 예쁘게 넣어줍니다~_~
자, 자세한 설명은 주석을 통해 달아놓았으니 참고하시기 바랍니다.
위에서 디버깅 로그를 보게되면 배열에 두 개의 객체가 들어가 있는 것을 볼 수 있고, 딕셔너리에 배열, 이름, 숫자 이렇게 세 개의 객체가 들어가 있는 것을 볼 수 있습니다.
그런데 배열에서는 우리가 넣어 준 순서대로 들어가서 로그에 찍히는데, 딕셔너리의 로그에는 우리가 집어 넣어준 순서대로 찍히질 않네요+_+
네, 그렇습니다. 딕셔너리는 기본적으로 우리가 넣어 준 순서대로 자료가 정리되어 있는 것을 보장하지 않습니다.
딕셔너리라는 주머니에 객체들이 막 널부러져 있는거죠~^^* 이 또한 배열과 딕셔너리의 차이점이 되겠습니다. ㅎ
자, 위에서 Mutable이 아닌 기본 클래스를 사용해 보았으니 이제 Mutable도 사용해 보아야 겠죠?
코드를 이쁘게 추가해 줍시다.
역시나 자세한 설명은 주석으로 들어가 있습니다~
우리가 처음에 생성해 주었던 배열과 딕셔너리에서 Mutable 녀석들로 객체의 내용을 복사해 온 후에 원하는 내용을 삭제 해 보았습니다.
물론 추가, 수정도 가능합니다~ 그것은 개발문서를 보고 여러분께서 직접 해보기실 권고드립니다^^
디버깅 로그를 살펴보면 우리가 삭제한 내용들이 나오지 않는 것을 확인할 수 있습니다.
이처럼 Mutable을 들어간다면 수정 가능한 녀석들이라고 보시면 되겠습니다.
자, 그런데 제가 위에서 설명드린 것만으로 이렇게 유용하고 좋고 깔쌈하고 이쁜 클래스들을 전부 알 수가 없습니다.
제가 일일히 다 설명을 할 수가 없으니까요^~^
그래서 우리에게는 개발문서가 존재합니다!!!ㅎㅎㅎ
자, 코드에서 alt 키를 누른 상태로 NSDictionary 위에 살포기 커서를 가져가면 밑줄이 생기죠? 클릭해 봅니다~
요렇게 아래 그림처럼 나올꺼예요~ 그렇다면 좀 더 자세히 알아보기 위해 Reference를 눌러봅시다~
이렇게 NSDictionary Class Reference가 나옵니다~
이 개발문서에서는 이 클래스에 관한 거의 모든 내용이 실려있습니다.
살펴보기 부터 시작해서, 가지고 있는 메소드와 변수 등등 모든 것이 나와있는 것이죠.
많은 내용들이 담겨져 있어요. 제가 이걸 다 블로그에 설명 할 수는 없겠죠?ㅎ
딕셔너리만 보면 서운하니까 배열 클래스도 놀러와 봅니다.
이렇게 메소드의 역할별로 카테고리가 나누어져 메소드가 정리되어 있어 쉽게 원하는 메소드를 찾아 볼 수 있습니다~_~
아래쪽에 Subclassing Note 라고 나와있는 부분이 있는데, 거기 위쪽에 보면 inherits from NSDictionary 라고 써져 있는 것 보이세요?
즉, '이 클래스는 NSDictionary를 상속받았다' 라는 뜻이죠?
그러므로 이녀석은 NSDictionary의 메소드와 변수들을 사용할 수 있다는 뜻이겠죠~ 거기에 추가적으로 수정 기능이 덧붙여 진 녀석이죠^^*
그래서 이녀석의 메소드들을 보면 몇 개 없습니다. 왜냐면 나머지 사용 가능한 메소드들은 NSDictionary에서 찾아볼 수 있거든요^^
이 글을 읽었다고 끝나는 것이 아니라 개발문서에서 이런저런 메소드 들을 보고 직접 실습해 보시기 바랍니다~
오늘은 그럼 여기 까~~~~~~~지!
감기때매 헤롱헤롱 @_@
by yagom
twitter : @yagomsoft
p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.
RSS Feed 받기
↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓
'Objective-C' 카테고리의 다른 글
Swift에 따른 Objective-C의 새로운 기능들 (2) | 2015.06.25 |
---|---|
Objective C 우린 왜 굳이 오브젝티브-C를 배워야 할까? (2) | 2014.04.22 |
Objective C <10>. 상속(2) - 오버라이딩 (8) | 2012.04.10 |
Objective C <9>. 상속(1) (10) | 2012.03.28 |
Objective C <8>. 메소드의 선언과 반환값 (17) | 2012.03.16 |