์ธ๋ฒคํ† ๋ฆฌ ์„ค๊ณ„์ค‘์ธ๋ฐ ์ธ๋ฒคํ† ๋ฆฌ ํด๋ž˜์Šค๊ฐ€ ์ปค์ ธ์„œ ๋”ฐ๋กœ ํด๋ž˜์Šค๋ฅผ ํŒŒ๊ณ  ๊ธฐ๋Šฅ๋“ค์„ ๋ถ„๋ฐฐํ•˜๋ คํ•จ


์›๋ž˜ ํด๋ž˜์Šค๊ฐ€


class Inventory

{

private Item[,] _itemArray;



prviate void AddItem(Item item)

{

// ์•„์ดํ…œ ์‚ฝ์ž…

SortInventory();

}


private void EraseItem(Item item)

{

// ์•„์ดํ…œ ์ง€์›€

SortInventory();

}


private void SortInventory()

{

// ์•„์ดํ…œ ๋นˆ๊ณต๊ฐ„ ์ฐพ์•„์„œ ์ •๋ ฌ

}


}




๋Œ€์ถฉ ์ด๋Ÿฐ์‹์ด๋ผ๊ณ  ์ณค์„๋•Œ ์ธ๋ฒคํ† ๋ฆฌ ์ •๋ ฌ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋–ผ์„œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›ํ•˜๋Š” ์ •๋ ฌ๊ธฐ์ค€์œผ๋กœ ์„ธํŒ…ํ•˜๋ฉด ๊ทธ ๊ธฐ์ค€๋Œ€๋กœ ์„ธํŒ…ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ ์‹ถ์€์ƒํ™ฉ์ž„



class InventorySorter

{

public SortInventory();

}


class Inventory

{

private Item[,] _itemArray;

private InventorySorter _sorter;



prviate void AddItem(Item item)

{

// ์•„์ดํ…œ ์‚ฝ์ž…

sorter.SortInventory();

}


private void EraseItem(Item item)

{

// ์•„์ดํ…œ ์ง€์›€

sorter.SortInventory();

}

}





๊ทผ๋ฐ ์ด๋Ÿฐ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด InventorySorter ์ž์ฒด์—์„œ ์†ŒํŒ…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์œ„ํ•ด Inventory์˜ ๋‚ด๋ถ€๋ณ€์ˆ˜๋ฐฐ์—ด _itemArray์— ์ง์ ‘์ ‘๊ทผํ•ด์•ผํ•˜์ž–์Šด?


์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฒŒ ์ข€ ๋” ์ƒ์‹์ ์ธ ์ ‘๊ทผ์ผ๊นŒ ๊ณ ๋ฏผ์ค‘์ธ๋ฐ


1. Sorter ํด๋ž˜์Šค์—์„œ Inventoryํด๋ž˜์Šค์˜ ๋‚ด๋ถ€๋ณ€์ˆ˜๋ฐฐ์—ด์„ ์ฐธ์กฐ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๊ณ  ์™€ Sorterํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์กฐ์ž‘ํ•œ๋‹ค



2. Inventoryํด๋ž˜์Šค์—์„œ ์ •๋ ฌ ํ•จ์ˆ˜๋“ค์„ ์ •์˜ํ•˜๊ณ  Sorterํด๋ž˜์Šค์—์„œ ํ”Œ๋ ˆ์ด์–ด์˜ ์„ค์ •์ž…๋ ฅ๋งŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ •๋ ฌ์ˆ˜ํ–‰์€ Inventoryํด๋ž˜์Šค ๋‚ด ์ •์˜๋œ

ํ•จ์ˆ˜๋“ค์„ Sorterํด๋ž˜์Šค์—์„œ ํ˜ธ์ถœํ•œ๋‹ค




์ด ๋‘๊ฐ€์ง€๋กœ ์ง€๊ธˆ ๊ณ ๋ฏผ์ค‘์ธ๋ฐ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ? ์ตœ๋Œ€ํ•œ ๋””์ปคํ”Œ๋ง๋œ ์ƒํ™ฉ์„ ์›ํ•˜๋Š”๋ฐ ๋ชจ๋ฅด๊ฒ ์Œ ์•„๋‹ˆ๋ฉด ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ์ œ์‹œ์ข€