์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ 'partition'์ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ํจ์์ ๋ฐ๋ผ ๋น๋๊ธฐ ์คํธ๋ฆผ์ ์ฌ๋ฌ ์คํธ๋ฆผ์ผ๋ก ๋ถํ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์. ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ: Partition - ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋น๋๊ธฐ ์คํธ๋ฆผ ๋ถํ
ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํนํ ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ด๋ I/O ๋ฐ์ด๋ ์์ ์ ๋ค๋ฃฐ ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ์ ์ ๋๋ ์ดํฐ๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ์ ์ ์ฉํ ๋๊ตฌ์ธ `partition` ํฌํผ๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ฑด์ ํจ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋จ์ผ ๋น๋๊ธฐ ์คํธ๋ฆผ์ ์ฌ๋ฌ ์คํธ๋ฆผ์ผ๋ก ๋ถํ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ๋ฐ์ดํฐ ์์๋ฅผ ํจ์จ์ ์ด๊ณ ๋ชฉํ์ ๋ง๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ์ ์ ๋๋ ์ดํฐ์ ์ดํด
`partition` ํฌํผ์ ๋ํด ์์๋ณด๊ธฐ ์ ์, ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ์ ์ ๋๋ ์ดํฐ์ ๋ํด ๊ฐ๋จํ ๋ณต์ตํด ๋ณด๊ฒ ์ต๋๋ค. ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๋ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๊ฐ์ฒด๋ก, `value`์ `done` ์์ฑ์ ๊ฐ์ง ๊ฐ์ฒด๋ก ํด์๋๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ `next()` ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ฐํํ๋ ํจ์์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ ๊ฐ ์ฌ์ด์ ์ด๋ฒคํธ ๋ฃจํ์ ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ๋ฉด์ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ์ํ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์๊ฒฉ API์์ ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ ๋จ์๋ก ๊ฐ์ ธ์ค๋ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ฅผ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค:
async function* fetchData(url, chunkSize) {
let offset = 0;
while (true) {
const response = await fetch(`${url}?offset=${offset}&limit=${chunkSize}`);
const data = await response.json();
if (data.length === 0) {
return;
}
for (const item of data) {
yield item;
}
offset += chunkSize;
}
}
์ด ์ ๋๋ ์ดํฐ๋ ๋ ์ด์ ๋ฐ์ดํฐ๊ฐ ์์ ๋๊น์ง ์ฃผ์ด์ง `url`์์ `chunkSize` ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๊ฐ `yield`๋ ์ ๋๋ ์ดํฐ์ ์คํ์ ์ผ์ ์ค๋จ์์ผ ๋ค๋ฅธ ๋น๋๊ธฐ ์์ ์ด ์งํ๋ ์ ์๋๋ก ํฉ๋๋ค.
`partition` ํฌํผ ์๊ฐ
`partition` ํฌํผ๋ ๋น๋๊ธฐ ์ดํฐ๋ฌ๋ธ(์์ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ๊ฐ์)๊ณผ ์กฐ๊ฑด์ ํจ์๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ต๋๋ค. ์ด๊ฒ์ ๋ ๊ฐ์ ์๋ก์ด ๋น๋๊ธฐ ์ดํฐ๋ฌ๋ธ์ ๋ฐํํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋น๋๊ธฐ ์ดํฐ๋ฌ๋ธ์ ์๋ณธ ์คํธ๋ฆผ์์ ์กฐ๊ฑด์ ํจ์๊ฐ ์ฐธ(truthy) ๊ฐ์ ๋ฐํํ๋ ๋ชจ๋ ์์๋ฅผ ์์ฑํฉ๋๋ค. ๋ ๋ฒ์งธ ๋น๋๊ธฐ ์ดํฐ๋ฌ๋ธ์ ์กฐ๊ฑด์ ํจ์๊ฐ ๊ฑฐ์ง(falsy) ๊ฐ์ ๋ฐํํ๋ ๋ชจ๋ ์์๋ฅผ ์์ฑํฉ๋๋ค.
`partition` ํฌํผ๋ ์๋ณธ ๋น๋๊ธฐ ์ดํฐ๋ฌ๋ธ์ ์์ ํ์ง ์์ต๋๋ค. ๋จ์ง ์๋ณธ์ผ๋ก๋ถํฐ ์ ํ์ ์ผ๋ก ์๋นํ๋ ๋ ๊ฐ์ ์๋ก์ด ์ดํฐ๋ฌ๋ธ์ ์์ฑํ ๋ฟ์ ๋๋ค.
๋ค์์ `partition`์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ์ฃผ๋ ๊ฐ๋ ์ ์์ ์ ๋๋ค:
async function* generateNumbers(count) {
for (let i = 0; i < count; i++) {
yield i;
}
}
async function main() {
const numbers = generateNumbers(10);
const [evenNumbers, oddNumbers] = partition(numbers, (n) => n % 2 === 0);
console.log("Even numbers:", await toArray(evenNumbers));
console.log("Odd numbers:", await toArray(oddNumbers));
}
// ๋น๋๊ธฐ ์ดํฐ๋ฌ๋ธ์ ๋ฐฐ์ด๋ก ๋ชจ์ผ๋ ํฌํผ ํจ์
async function toArray(asyncIterable) {
const result = [];
for await (const item of asyncIterable) {
result.push(item);
}
return result;
}
// ๋จ์ํ๋ partition ๊ตฌํ (์์ฐ์ฉ)
async function partition(asyncIterable, predicate) {
const positive = [];
const negative = [];
for await (const item of asyncIterable) {
if (await predicate(item)) {
positive.push(item);
} else {
negative.push(item);
}
}
return [positive, negative];
}
main();
์ฐธ๊ณ : ์ ๊ณต๋ `partition` ๊ตฌํ์ ๋งค์ฐ ๋จ์ํ๋์์ผ๋ฉฐ, ๋ฐํํ๊ธฐ ์ ์ ๋ชจ๋ ์์๋ฅผ ๋ฐฐ์ด์ ๋ฒํผ๋งํ๊ธฐ ๋๋ฌธ์ ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ์ง ์์ต๋๋ค. ์ค์ ๊ตฌํ์์๋ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.
์ด ๋จ์ํ๋ ๋ฒ์ ์ ๊ฐ๋ ์ ๋ช ํ์ฑ์ ์ํ ๊ฒ์ ๋๋ค. ์ค์ ๊ตฌํ์์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ฏธ๋ฆฌ ๋ก๋ํ์ง ์๋๋ก ๋ ๊ฐ์ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๋ฅผ ์คํธ๋ฆผ ์์ฒด๋ก ์์ฑํด์ผ ํฉ๋๋ค.
๋ ํ์ค์ ์ธ `partition` ๊ตฌํ (์คํธ๋ฆฌ๋ฐ)
๋ค์์ ๋ฉ๋ชจ๋ฆฌ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ๋ ๊ฒ์ ํผํ๊ณ ํจ์จ์ ์ธ ์คํธ๋ฆฌ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ฅผ ํ์ฉํ ๋ ๊ฒฌ๊ณ ํ `partition` ๊ตฌํ์ ๋๋ค:
async function partition(asyncIterable, predicate) {
async function* positiveStream() {
for await (const item of asyncIterable) {
if (await predicate(item)) {
yield item;
}
}
}
async function* negativeStream() {
for await (const item of asyncIterable) {
if (!(await predicate(item))) {
yield item;
}
}
}
return [positiveStream(), negativeStream()];
}
์ด ๊ตฌํ์ `positiveStream`๊ณผ `negativeStream`์ด๋ผ๋ ๋ ๊ฐ์ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ํจ์๋ฅผ ์์ฑํฉ๋๋ค. ๊ฐ ์ ๋๋ ์ดํฐ๋ ์๋ณธ `asyncIterable`์ ๋ฐ๋ณตํ๋ฉฐ `predicate` ํจ์์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์์๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋ ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ณผ๋ถํ๋ฅผ ๋ฐฉ์งํ๊ณ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
`partition`์ ์ฌ์ฉ ์ฌ๋ก
`partition` ํฌํผ๋ ๋ค์ฌ๋ค๋ฅํ๋ฉฐ ๋ค์ํ ์๋๋ฆฌ์ค์ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ํ์ ๋๋ ์์ฑ์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ ํํฐ๋ง
๋ค์ํ ์ ํ์ ์ด๋ฒคํธ(์: ์ฌ์ฉ์ ๋ก๊ทธ์ธ, ์ฃผ๋ฌธ, ์ค๋ฅ ๋ก๊ทธ)๋ฅผ ๋ํ๋ด๋ JSON ๊ฐ์ฒด์ ๋น๋๊ธฐ ์คํธ๋ฆผ์ด ์๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. `partition`์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ด๋ฒคํธ๋ฅผ ๋ชฉํ ์ฒ๋ฆฌ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ์คํธ๋ฆผ์ผ๋ก ๋ถ๋ฆฌํ ์ ์์ต๋๋ค:
async function* generateEvents() {
yield { type: "user_login", userId: 123, timestamp: Date.now() };
yield { type: "order_placed", orderId: 456, amount: 100 };
yield { type: "error_log", message: "Failed to connect to database", timestamp: Date.now() };
yield { type: "user_login", userId: 789, timestamp: Date.now() };
}
async function main() {
const events = generateEvents();
const [userLogins, otherEvents] = partition(events, (event) => event.type === "user_login");
console.log("User logins:", await toArray(userLogins));
console.log("Other events:", await toArray(otherEvents));
}
2. ๋ฉ์์ง ํ์์ ๋ฉ์์ง ๋ผ์ฐํ
๋ฉ์์ง ํ ์์คํ ์์๋ ๋ด์ฉ์ ๋ฐ๋ผ ๋ฉ์์ง๋ฅผ ๋ค๋ฅธ ์๋น์์๊ฒ ๋ผ์ฐํ ํ๊ณ ์ถ์ ์ ์์ต๋๋ค. `partition` ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ด์ค๋ ๋ฉ์์ง ์คํธ๋ฆผ์ ํน์ ์๋น์ ๊ทธ๋ฃน์ ๋์์ผ๋ก ํ๋ ์ฌ๋ฌ ์คํธ๋ฆผ์ผ๋ก ๋ถํ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธ์ต ๊ฑฐ๋์ ๊ด๋ จ๋ ๋ฉ์์ง๋ ๊ธ์ต ์ฒ๋ฆฌ ์๋น์ค๋ก ๋ผ์ฐํ ํ๊ณ , ์ฌ์ฉ์ ํ๋๊ณผ ๊ด๋ จ๋ ๋ฉ์์ง๋ ๋ถ์ ์๋น์ค๋ก ๋ผ์ฐํ ํ ์ ์์ต๋๋ค.
3. ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ
๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ ๋ `partition`์ ์ฌ์ฉํ์ฌ ์ ํจํ ๋ ์ฝ๋์ ์ ํจํ์ง ์์ ๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. ์ ํจํ์ง ์์ ๋ ์ฝ๋๋ ์ค๋ฅ ๋ก๊น , ์์ ๋๋ ๊ฑฐ๋ถ๋ฅผ ์ํด ๋ณ๋๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
async function* generateData() {
yield { id: 1, name: "Alice", age: 30 };
yield { id: 2, name: "Bob", age: -5 }; // ์ ํจํ์ง ์์ ๋์ด
yield { id: 3, name: "Charlie", age: 25 };
}
async function main() {
const data = generateData();
const [validRecords, invalidRecords] = partition(data, (record) => record.age >= 0);
console.log("Valid records:", await toArray(validRecords));
console.log("Invalid records:", await toArray(invalidRecords));
}
4. ๊ตญ์ ํ(i18n) ๋ฐ ํ์งํ(l10n)
์ฌ๋ฌ ์ธ์ด๋ก ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๋ ์์คํ ์ด ์๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. `partition`์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์ง์ญ์ด๋ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ์ํ ์๋๋ ์ธ์ด์ ๋ฐ๋ผ ์ฝํ ์ธ ๋ฅผ ํํฐ๋งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธฐ์ฌ ์คํธ๋ฆผ์ ๋ถํ ํ์ฌ ๋ถ๋ฏธ์ ์๊ตญ์ ์ํ ์์ด ๊ธฐ์ฌ์ ๋ผํด ์๋ฉ๋ฆฌ์นด์ ์คํ์ธ์ ์ํ ์คํ์ธ์ด ๊ธฐ์ฌ๋ฅผ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ๊ฐ์ธํ๋๊ณ ๊ด๋ จ์ฑ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์์: ๊ณ ๊ฐ ์ง์ ํฐ์ผ์ ์ธ์ด๋ณ๋ก ๋ถ๋ฆฌํ์ฌ ์ ์ ํ ์ง์ํ์ผ๋ก ๋ผ์ฐํ ํฉ๋๋ค.
5. ์ฌ๊ธฐ ํ์ง
๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ฑฐ๋ ์คํธ๋ฆผ์ ๋ถํ ํ์ฌ ํน์ ๊ธฐ์ค(์: ๋น์ ์์ ์ผ๋ก ๋์ ๊ธ์ก, ์์ฌ์ค๋ฌ์ด ์์น์์์ ๊ฑฐ๋)์ ๋ฐ๋ผ ์ ์ฌ์ ์ธ ์ฌ๊ธฐ ํ์๋ฅผ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. ์๋ณ๋ ๊ฑฐ๋๋ ์ฌ๊ธฐ ํ์ง ๋ถ์๊ฐ์ ์ํ ์ถ๊ฐ ์กฐ์ฌ๋ฅผ ์ํด ํ๋๊ทธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
`partition` ์ฌ์ฉ์ ์ด์
- ์ฝ๋ ๊ตฌ์ฑ ๊ฐ์ : `partition`์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ก์ง์ ๋ณ๊ฐ์ ์คํธ๋ฆผ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๋ชจ๋์ฑ์ ๋์ด๊ณ ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํต๋๋ค.
- ์ฑ๋ฅ ํฅ์: ๊ฐ ์คํธ๋ฆผ์์ ๊ด๋ จ ๋ฐ์ดํฐ๋ง ์ฒ๋ฆฌํจ์ผ๋ก์จ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ๋ฆฌ์์ค ์๋น๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- ์ ์ฐ์ฑ ์ฆ๊ฐ: `partition`์ ์ฌ์ฉํ๋ฉด ๋ณํํ๋ ์๊ตฌ์ฌํญ์ ๋ง์ถฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ์ฝ๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ: ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ๊ณผ ์ํํ๊ฒ ํตํฉ๋์ด ๋์ฉ๋ ๋ฐ์ดํฐ์ ๊ณผ I/O ๋ฐ์ด๋ ์์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๊ณ ๋ ค์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
- ์กฐ๊ฑด์ ํจ์ ์ฑ๋ฅ: ์กฐ๊ฑด์ ํจ์๋ ์คํธ๋ฆผ์ ๊ฐ ์์์ ๋ํด ์คํ๋๋ฏ๋ก ํจ์จ์ ์ธ์ง ํ์ธํด์ผ ํฉ๋๋ค. ์กฐ๊ฑด์ ํจ์ ๋ด์์ ๋ณต์กํ ๊ณ์ฐ์ด๋ I/O ์์ ์ ํผํ์ธ์.
- ๋ฆฌ์์ค ๊ด๋ฆฌ: ๋๊ท๋ชจ ์คํธ๋ฆผ์ ๋ค๋ฃฐ ๋ ๋ฆฌ์์ค ์๋น์ ์ ์ํ์ธ์. ๋ฉ๋ชจ๋ฆฌ ๊ณผ๋ถํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ญ์(backpressure)๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
- ์ค๋ฅ ์ฒ๋ฆฌ: ์คํธ๋ฆผ ์ฒ๋ฆฌ ์ค์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ฒฌ๊ณ ํ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ธ์.
- ์ทจ์: ๋ ์ด์ ํ์ํ์ง ์์ ๋ ์คํธ๋ฆผ์์ ํญ๋ชฉ ์๋น๋ฅผ ์ค๋จํ๊ธฐ ์ํ ์ทจ์ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ธ์. ์ด๋ ํนํ ๋ฌดํ ์คํธ๋ฆผ์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ด์ : ๋ค์ํ ๋ฐ์ดํฐ์ ์ ์ํ `partition` ์กฐ์
์ ์ธ๊ณ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋๋ ๋ฌธํ์ , ์ง์ญ์ ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. `partition` ํฌํผ๋ ์กฐ๊ฑด์ ํจ์ ๋ด์ ๋ก์ผ์ผ ์ธ์ ๋น๊ต ๋ฐ ๋ณํ์ ํตํฉํ์ฌ ๋ค์ํ ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌํ๋๋ก ์กฐ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํตํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํ ๋๋ ํ์จ๊ณผ ์ง์ญ๋ณ ์์ ๊ท์น์ ๊ณ ๋ คํ๋ ํตํ ์ธ์ ๋น๊ต ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์กฐ๊ฑด์๋ ๋ค๋ฅธ ๋ฌธ์ ์ธ์ฝ๋ฉ๊ณผ ์ธ์ด ๊ท์น์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
์์: ํน์ ์ง์ญ์ ๋ง์ถ ๋ค๋ฅธ ๋ง์ผํ ์ ๋ต์ ์ ์ฉํ๊ธฐ ์ํด ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ง๋ฆฌ ์์น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ง์ญ ๋ง์ผํ ํต์ฐฐ๋ ฅ์ ์กฐ๊ฑด์ ํจ์์ ํตํฉํด์ผ ํฉ๋๋ค.
ํผํด์ผ ํ ์ผ๋ฐ์ ์ธ ์ค์
- `done` ์ ํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ์ง ์์: ์๊ธฐ์น ์์ ๋์์ด๋ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฝ๋๊ฐ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ์ `done` ์ ํธ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋์ง ํ์ธํ์ธ์.
- ์กฐ๊ฑด์ ํจ์์์ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ฐจ๋จํจ: ์กฐ๊ฑด์ ํจ์์์ ๋๊ธฐ์ ์์ ์ด๋ ์ค๋ ์คํ๋๋ ์์ ์ ์ํํ์ง ๋ง์ธ์. ์ด๋ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ฐจ๋จํ๊ณ ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ต๋๋ค.
- ๋น๋๊ธฐ ์์ ์ ์ ์ฌ์ ์ค๋ฅ ๋ฌด์: ๋คํธ์ํฌ ์์ฒญ์ด๋ ํ์ผ ์์คํ ์ ๊ทผ๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์์ ์ค์ ๋ฐ์ํ ์ ์๋ ์ ์ฌ์ ์ค๋ฅ๋ฅผ ํญ์ ์ฒ๋ฆฌํ์ธ์. `try...catch` ๋ธ๋ก์ด๋ ํ๋ก๋ฏธ์ค ๊ฑฐ๋ถ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๊ณ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ์ธ์.
- ํ๋ก๋์ ์์ ๋จ์ํ๋ ๋ฒ์ ์ partition ์ฌ์ฉ: ์ด์ ์ ๊ฐ์กฐํ๋ฏ์ด, ๋จ์ํ๋ ์์ ์ฒ๋ผ ํญ๋ชฉ์ ์ง์ ๋ฒํผ๋งํ์ง ๋ง์ธ์.
`partition`์ ๋์
`partition`์ ๊ฐ๋ ฅํ ๋๊ตฌ์ด์ง๋ง, ๋น๋๊ธฐ ์คํธ๋ฆผ์ ๋ถํ ํ๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์๋ ์์ต๋๋ค:
- ์ฌ๋ฌ ํํฐ ์ฌ์ฉ: ์๋ณธ ์คํธ๋ฆผ์ ์ฌ๋ฌ `filter` ์์ ์ ์ ์ฉํ์ฌ ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ ๊ทผ ๋ฐฉ์์ ์คํธ๋ฆผ์ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํด์ผ ํ๋ฏ๋ก `partition`๋ณด๋ค ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ง์ ์คํธ๋ฆผ ๋ณํ: ํน์ ๊ธฐ์ค์ ๋ฐ๋ผ ์คํธ๋ฆผ์ ์ฌ๋ฌ ์คํธ๋ฆผ์ผ๋ก ๋ถํ ํ๋ ์ฌ์ฉ์ ์ง์ ์คํธ๋ฆผ ๋ณํ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ฅ ํฐ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ง๋ง ๊ตฌํํ๋ ๋ฐ ๋ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ ํฌํผ `partition`์ ์กฐ๊ฑด์ ํจ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น๋๊ธฐ ์คํธ๋ฆผ์ ์ฌ๋ฌ ์คํธ๋ฆผ์ผ๋ก ํจ์จ์ ์ผ๋ก ๋ถํ ํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ ๋๋ค. ์ด๋ ์ฝ๋ ๊ตฌ์ฑ์ ์ด์งํ๊ณ , ์ฑ๋ฅ์ ํฅ์์ํค๋ฉฐ, ์ ์ฐ์ฑ์ ๋์ ๋๋ค. ๊ทธ ์ด์ , ๊ณ ๋ ค์ฌํญ ๋ฐ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ดํดํจ์ผ๋ก์จ `partition`์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ฌ ๊ฒฌ๊ณ ํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๊ธ๋ก๋ฒ ๊ด์ ์ ๊ณ ๋ คํ๊ณ ๋ค์ํ ๋ฐ์ดํฐ์ ์ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ๊ตฌํ์ ์กฐ์ ํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ์ธ์. `partition`์ ์ง์ ํ ์คํธ๋ฆฌ๋ฐ ๋ฒ์ ์ ๊ตฌํํ๊ณ ๋ชจ๋ ์์๋ฅผ ๋ฏธ๋ฆฌ ๋ฒํผ๋งํ๋ ๊ฒ์ ํผํ๋ ๊ฒ์ ๊ธฐ์ตํ์ธ์.