์๋ ํ์ธ์. ์ด๋ฒ์๋ Objective-C์์ ์ปฌ๋ ์ ์ ์์๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋ ๋น ๋ฅธ ์ด๊ฑฐ(Fast Enumeration) ๊ธฐ๋ฅ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค. iOS/macOS ๊ฐ๋ฐ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ด ์ ์ฉํ ๊ธฐ๋ฅ์ ์์ธํ ์์๋ด ์๋ค.
๐ ๋น ๋ฅธ ์ด๊ฑฐ๋ ๋ฌด์์ธ๊ฐ?
๋น ๋ฅธ ์ด๊ฑฐ๋ ์ปฌ๋ ์ ์ ๋ด์ฉ์ ํจ์จ์ ์ด๊ณ ์์ ํ๊ฒ ์ด๊ฑฐํ ์ ์๋๋ก ํด์ฃผ๋ Objective-C์ ์ธ์ด ๊ธฐ๋ฅ์ ๋๋ค. ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด, ๋์ ๋๋ฆฌ, ์ธํธ ๋ฑ์ ์ปฌ๋ ์ ์์๋ฅผ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค.
๋น ๋ฅธ ์ด๊ฑฐ(Fast Enumeration): Objective-C์์ ์ปฌ๋ ์ ์ ์์๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ๊ธฐ ์ํ ์ธ์ด ๊ธฐ๋ฅ์ผ๋ก, for...in ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
๐ for...in ๊ตฌ๋ฌธ
๋น ๋ฅธ ์ด๊ฑฐ์ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋ฉ๋๋ค:
for (Type newVariable in expression) { statements }
๋๋ ๊ธฐ์กด ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
Type existingItem;
for (existingItem in expression) { statements }
๋ ๊ฒฝ์ฐ ๋ชจ๋, expression์ NSFastEnumeration ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐ๋ณต ๋ณ์๋ ์ฐจ๋ก๋ก ๋ฐํ๋ ๊ฐ์ฒด์ ๊ฐ ํญ๋ชฉ์ผ๋ก ์ค์ ๋๊ณ , statements๋ก ์ ์๋ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค.
๋ฐ๋ณต ๋ณ์(Iterating Variable): ์ด๊ฑฐ ๊ณผ์ ์์ ๊ฐ ์์๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์์ ๋๋ค.
NSFastEnumeration: ๋น ๋ฅธ ์ด๊ฑฐ๋ฅผ ์ง์ํ๊ธฐ ์ํด ๊ฐ์ฒด๊ฐ ์ค์ํด์ผ ํ๋ ํ๋กํ ์ฝ์ ๋๋ค.
๋ฐ๋ณต ๋ณ์๋ ์์ค ๊ฐ์ฒด ํ์ด ์์ง๋์ด ๋ฃจํ๊ฐ ์ข ๋ฃ๋ ๋ nil๋ก ์ค์ ๋ฉ๋๋ค. ๋ฃจํ๊ฐ ์ผ์ฐ ์ข ๋ฃ๋๋ฉด ๋ฐ๋ณต ๋ณ์๋ ๋ง์ง๋ง ๋ฐ๋ณต ํญ๋ชฉ์ ๊ฐ๋ฆฌํค๋ ์ํ๋ก ๋จ์ต๋๋ค.
๐ ๋น ๋ฅธ ์ด๊ฑฐ์ ์ฅ์
๋น ๋ฅธ ์ด๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ๋ ์ฌ๋ฌ ๊ฐ์ง ์ฅ์ ์ด ์์ต๋๋ค:
- ํจ์จ์ฑ: NSEnumerator๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์๋นํ ๋ ํจ์จ์ ์ ๋๋ค.
- ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ: ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฝ์ต๋๋ค.
- ์์ ์ฑ: ์ด๊ฑฐ์์๋ ๋ณ๊ฒฝ ๋ฐฉ์ง ๊ธฐ๋ฅ์ด ์์ด ์ด๊ฑฐ ์ค์ ์ปฌ๋ ์ ์ ์์ ํ๋ ค๊ณ ํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ๋์ ์ด๊ฑฐ ๊ฐ๋ฅ: ๋ฐ๋ณต ์ค ๊ฐ์ฒด ๋ณ๊ฒฝ์ด ๊ธ์ง๋๋ฏ๋ก ์ฌ๋ฌ ์ด๊ฑฐ๋ฅผ ๋์์ ์ํํ ์ ์์ต๋๋ค.
๋ณ๊ฒฝ ๋ฐฉ์ง ๊ธฐ๋ฅ(Mutation Guard): ์ด๊ฑฐ ์ค ์ปฌ๋ ์ ์ด ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ์์ ์ฅ์น์ ๋๋ค.
๋ค๋ฅธ ์ธก๋ฉด์์๋ ํ์ค for ๋ฃจํ์ฒ๋ผ ์๋ํฉ๋๋ค. break๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต์ ์ค๋จํ๊ณ continue๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ์์๋ก ์งํํ ์ ์์ต๋๋ค.
๐ ๋น ๋ฅธ ์ด๊ฑฐ ์ฑํํ๊ธฐ
๋ค๋ฅธ ๊ฐ์ฒด์ ์ปฌ๋ ์ ์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํ๋ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง ๋ชจ๋ ํด๋์ค๋ NSFastEnumeration ํ๋กํ ์ฝ์ ์ฑํํ ์ ์์ต๋๋ค. Foundation ํ๋ ์์ํฌ์ ์ปฌ๋ ์ ํด๋์ค์ธ NSArray, NSDictionary, NSSet์ ์ด ํ๋กํ ์ฝ์ ์ฑํํ๋ฉฐ, NSEnumerator๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
NSArray์ NSSet์ ๊ฒฝ์ฐ ์ด๊ฑฐ๊ฐ ๊ทธ๋ค์ ๋ด์ฉ์ ๋์์ผ๋ก ํ๋ค๋ ๊ฒ์ด ๋ถ๋ช ํฉ๋๋ค. ๋ค๋ฅธ ํด๋์ค์ ๊ฒฝ์ฐ, ํด๋น ๋ฌธ์์์ ์ด๋ค ์์ฑ์ด ๋ฐ๋ณต๋๋์ง ๋ช ํํ ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
- NSDictionary: ํค(key)๋ฅผ ์ด๊ฑฐํฉ๋๋ค.
- NSManagedObjectModel: ์ํฐํฐ(entity)๋ฅผ ์ด๊ฑฐํฉ๋๋ค.
์ฑํ(Adoption): ํด๋์ค๊ฐ ํน์ ํ๋กํ ์ฝ์ ์๊ตฌ์ฌํญ์ ๊ตฌํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๐ ๋น ๋ฅธ ์ด๊ฑฐ ์ฌ์ฉ ์์
NSArray์ ํจ๊ป ์ฌ์ฉํ๊ธฐ
NSArray *array = [NSArray arrayWithObjects:
@"one", @"two", @"three", @"four", nil];
for (NSString *element in array) {
NSLog(@"element: %@", element);
}
์ด ์ฝ๋๋ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ํํ๋ฉฐ ์ฝ์์ ์ถ๋ ฅํฉ๋๋ค.
NSDictionary์ ํจ๊ป ์ฌ์ฉํ๊ธฐ
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"quattuor", @"four", @"quinque", @"five", @"sex", @"six", nil];
NSString *key;
for (key in dictionary) {
NSLog(@"English: %@, Latin: %@", key, [dictionary objectForKey:key]);
}
์ด ์์ ์์๋ ๋์ ๋๋ฆฌ์ ๋ชจ๋ ํค๋ฅผ ์ํํ๊ณ , ๊ฐ ํค์ ํด๋น ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
NSEnumerator์ ํจ๊ป ์ฌ์ฉํ๊ธฐ
NSArray *array = [NSArray arrayWithObjects:
@"one", @"two", @"three", @"four", nil];
NSEnumerator *enumerator = [array reverseObjectEnumerator];
for (NSString *element in enumerator) {
if ([element isEqualToString:@"three"]) {
break;
}
}
NSString *next = [enumerator nextObject];
// next = "two"
์ด ์์ ๋ ๋ฐฐ์ด์ ์ญ๋ฐฉํฅ ์ด๊ฑฐ์๋ฅผ ์ฌ์ฉํ๊ณ , "three" ๋ฌธ์์ด์ ๋ง๋๋ฉด ๋ฃจํ๋ฅผ ์ค๋จํฉ๋๋ค. ๊ทธ ํ์๋ ์ด๊ฑฐ์๋ฅผ ๊ณ์ ์ฌ์ฉํ ์ ์์์ ๋ณด์ฌ์ค๋๋ค.
์ธ๋ฑ์ค์ ํจ๊ป ์ฌ์ฉํ๊ธฐ
์์๊ฐ ์ ์ ์๋ ์ปฌ๋ ์ (์: NSArray)์ ๊ฒฝ์ฐ, ์ด๊ฑฐ๋ ํด๋น ์์๋๋ก ์งํ๋๋ฏ๋ก ๋ฐ๋ณต ํ์๋ฅผ ์ธ๋ ๊ฒ์ผ๋ก ์ปฌ๋ ์ ์ ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์ป์ ์ ์์ต๋๋ค.
NSArray *array = <#๋ฐฐ์ด ๊ฐ์ ธ์ค๊ธฐ#>;
NSUInteger index = 0;
for (id element in array) {
NSLog(@"์ธ๋ฑ์ค %u์ ์์: %@", index, element);
index++;
}
์ ๋ฆฌ
๋น ๋ฅธ ์ด๊ฑฐ๋ Objective-C์์ ์ปฌ๋ ์ ์ ํจ์จ์ ์ผ๋ก ์ํํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ๊ณผ ์์ ํ ์ด๊ฑฐ ๊ธฐ๋ฅ์ ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ๊ฒฌ๊ณ ํ๊ฒ ๋ง๋ญ๋๋ค. Foundation ํ๋ ์์ํฌ์ ๋ชจ๋ ์ปฌ๋ ์ ํด๋์ค์ ํจ๊ป ์ฌ์ฉํ ์ ์์ด, iOS/macOS ๊ฐ๋ฐ์์ ๋งค์ฐ ์ ์ฉํ ๋๊ตฌ์ ๋๋ค.
'๐ฅ Bread Basics > Obj-c' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Obj-C ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ค๋ ๋ฉ๊ณผ ๋๊ธฐํ (0) | 2025.04.14 |
---|---|
Obj-C ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์์ธ ์ฒ๋ฆฌ (1) | 2025.04.14 |
Obj-C ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ ๋ ํฐ(Selector) (0) | 2025.04.14 |
Obj-C ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ ์ ๋์ ์ดํดํ๊ธฐ (0) | 2025.04.14 |
Obj-C ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ฐ๊ด ์ฐธ์กฐ(Associative References) (0) | 2025.04.14 |
Obj-C ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - Categories์ Extensions (0) | 2025.04.14 |
Obj-C ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ ์ธ๋ ํ๋กํผํฐ(Declared Properties) (0) | 2025.04.14 |
Obj-C ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ํ๋กํ ์ฝ (0) | 2025.04.14 |