NSArray는 순서가 있는 객체의 집합을 나타낸다. NSArray는 생성 후에는 변경할 수 없는 불변 배열로 객체를 추가하거나 삭제하는 것이 불가능하고, NSMutableArray는 NSArray의 서브클래스로, 동적으로 크기를 변경할 수 있는 가변 배열로 객체를 추가하거나 삭제할 수 있다.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// NSArray 객체 생성
NSArray *array = @[@"Apple", @"Banana", @"Cherry"];
// objectAtIndex:: 지정된 인덱스에 있는 객체를 반환
NSLog(@"Object at index 1: %@", [array objectAtIndex:1]); // 출력: Banana
// containsObject:: 배열이 특정 객체를 포함하는지 확인
BOOL containsApple = [array containsObject:@"Apple"];
NSLog(@"Array contains 'Apple': %@", containsApple ? @"Yes" : @"No"); // 출력: Yes
// count: 배열의 객체 수를 반환
NSUInteger count = [array count];
NSLog(@"Number of objects in array: %lu", (unsigned long)count); // 출력: 3
}
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// NSMutableArray 객체 생성
NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"Apple", @"Banana", nil];
// addObject:: 배열의 끝에 객체를 추가
[mutableArray addObject:@"Cherry"];
NSLog(@"Array after adding 'Cherry': %@", mutableArray); // 출력: (Apple, Banana, Cherry)
// addObjectsFromArray:: 다른 배열의 객체들을 현재 배열에 추가
NSArray *additionalArray = @[@"Date", @"Elderberry"];
[mutableArray addObjectsFromArray:additionalArray];
NSLog(@"Array after adding objects from additionalArray: %@", mutableArray); // 출력: (Apple, Banana, Cherry, Date, Elderberry)
// insertObject:atIndex:: 배열의 특정 인덱스에 객체를 삽입
[mutableArray insertObject:@"Blueberry" atIndex:1];
NSLog(@"Array after inserting 'Blueberry' at index 1: %@", mutableArray); // 출력: (Apple, Blueberry, Banana, Cherry, Date, Elderberry)
// removeObjectAtIndex:: 지정된 인덱스의 객체를 제거
[mutableArray removeObjectAtIndex:2];
NSLog(@"Array after removing object at index 2: %@", mutableArray); // 출력: (Apple, Blueberry, Cherry, Date, Elderberry)
// replaceObjectAtIndex:withObject:: 특정 인덱스의 객체를 다른 객체로 교체
[mutableArray replaceObjectAtIndex:1 withObject:@"Grape"];
NSLog(@"Array after replacing object at index 1 with 'Grape': %@", mutableArray); // 출력: (Apple, Grape, Cherry, Date, Elderberry)
// removeObject:: 특정 객체를 배열에서 제거
[mutableArray removeObject:@"Cherry"];
NSLog(@"Array after removing 'Cherry': %@", mutableArray); // 출력: (Apple, Grape, Date, Elderberry)
// count:: 배열의 객체 수를 반환
NSUInteger count = [mutableArray count];
NSLog(@"Number of objects in array: %lu", (unsigned long)count); // 출력: Number of objects in array: 4
// objectAtIndex:: 지정된 인덱스에 있는 객체를 반환
NSString *objectAtIndex0 = [mutableArray objectAtIndex:0];
NSLog(@"Object at index 0: %@", objectAtIndex0); // 출력: Object at index 0: Apple
// containsObject:: 배열이 특정 객체를 포함하는지 확인
BOOL containsGrape = [mutableArray containsObject:@"Grape"];
NSLog(@"Array contains 'Grape': %@", containsGrape ? @"Yes" : @"No"); // 출력: Yes
}
return 0;
}
NSDictionary는 키와 값의 쌍으로 이루어진 불변의 컬렉션이다. 각 키는 유일해야 하며, 키를 통해 값을 조회할 수 있다. NSDictionary는 생성 후에는 변경할 수 없는 불변 딕셔너리이고, NSMutableDictionary는 NSDictionary의 서브클래스로, 동적으로 변경할 수 있는 가변 딕셔너리로 객체를 추가, 삭제할 수 있고 값을 업데이트할 수 있다.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// NSDictionary 객체 생성
NSDictionary *dictionary = @{
@"name": @"John",
@"age": @30,
@"city": @"New York"
};
// objectForKey:: 특정 키에 대한 값을 반환
NSLog(@"Name: %@", [dictionary objectForKey:@"name"]); // 출력: John
// allKeys:: 모든 키를 반환
NSArray *keys = [dictionary allKeys];
NSLog(@"All keys: %@", keys); // 출력: (name, age, city)
// allValues:: 모든 값을 반환
NSArray *values = [dictionary allValues];
NSLog(@"All values: %@", values); // 출력: (John, 30, New York)
}
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// NSMutableDictionary 객체 생성
NSMutableDictionary *mutableDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"John", @"name",
@30, @"age", nil];
// setObject:forKey:: 딕셔너리에 키와 값을 추가 또는 업데이트
[mutableDict setObject:@"New York" forKey:@"city"];
NSLog(@"Dictionary after adding 'city': %@", mutableDict); // 출력: {name = John; age = 30; city = New York;}
// replaceObjectForKey:: 특정 키의 값을 업데이트
[mutableDict setObject:@"Los Angeles" forKey:@"city"];
NSLog(@"Dictionary after replacing 'city': %@", mutableDict); // 출력: {name = John; age = 30; city = Los Angeles;}
// removeObjectForKey:: 특정 키의 객체를 제거
[mutableDict removeObjectForKey:@"age"];
NSLog(@"Dictionary after removing 'age': %@", mutableDict); // 출력: {name = John; city = Los Angeles;}
// count:: 딕셔너리의 객체 수를 반환
NSUInteger count = [mutableDict count];
NSLog(@"Number of objects in dictionary: %lu", (unsigned long)count); // 출력: Number of objects in dictionary: 2
// objectForKey:: 특정 키의 값을 반환
NSString *name = [mutableDict objectForKey:@"name"];
NSLog(@"Value for key 'name': %@", name); // 출력: Value for key 'name': John
// allKeys:: 딕셔너리의 모든 키를 반환
NSArray *allKeys = [mutableDict allKeys];
NSLog(@"All keys in dictionary: %@", allKeys); // 출력: All keys in dictionary: (name, city)
// allValues:: 딕셔너리의 모든 값을 반환
NSArray *allValues = [mutableDict allValues];
NSLog(@"All values in dictionary: %@", allValues); // 출력: All values in dictionary: (John, Los Angeles)
}
return 0;
}
NSSet은 중복되지 않는 객체의 집합을 표현하는 컬렉션이다. 순서가 보장되지 않으며, 각 객체는 유일해야한다. NSSet은 생성 후에는 변경할 수 없는 불변 집합이고, NSMutableSet은 NSSet의 서브클래스로, 동적으로 변경할 수 있는 가변 집합이다.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// NSSet 객체 생성
NSSet *set = [NSSet setWithObjects:@"Apple", @"Banana", @"Cherry", nil];
// containsObject:: 집합이 특정 객체를 포함하는지 확인
BOOL containsBanana = [set containsObject:@"Banana"];
NSLog(@"Set contains 'Banana': %@", containsBanana ? @"Yes" : @"No"); // 출력: Yes
// allObjects:: 집합의 모든 객체를 반환
NSArray *allObjects = [set allObjects];
NSLog(@"All objects in set: %@", allObjects); // 출력: (Apple, Banana, Cherry)
}
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// NSMutableSet 객체 생성
NSMutableSet *mutableSet = [NSMutableSet setWithObjects:@1, @2, @3, nil];
// addObject:: 집합에 객체 추가
[mutableSet addObject:@4];
NSLog(@"Set after adding 4: %@", mutableSet); // 출력: {1, 2, 3, 4}
// removeObject:: 집합에서 특정 객체 제거
[mutableSet removeObject:@3];
NSLog(@"Set after removing 3: %@", mutableSet); // 출력: {1, 2, 4}
// count:: 집합의 요소 개수 반환
NSUInteger count = [mutableSet count];
NSLog(@"Number of objects in set: %lu", (unsigned long)count); // 출력: Number of objects in set: 3
// containsObject:: 집합이 특정 객체를 포함하는지 확인
BOOL contains = [mutableSet containsObject:@2];
NSLog(@"Set contains 2: %@", contains ? @"Yes" : @"No"); // 출력: Yes
// allObjects:: 집합의 모든 요소를 배열로 변환
NSArray *allObjectsArray = [mutableSet allObjects];
NSLog(@"All objects in the set: %@", allObjectsArray); // 출력: All objects in the set: (1, 2, 4)
// removeAllObjects:: 집합의 모든 요소 제거
[mutableSet removeAllObjects];
NSLog(@"Set after removing all objects: %@", mutableSet); // 출력: {}
}
return 0;
}
Objective-C에서는 Swift와 다르게 튜플을 지원하지 않는다. NSArray이나 NSDictionary를 이용해서 비슷하게 구현해야 한다.