4๋ฒˆ์งธ ์Šคํ„ฐ๋”” ์ดํ›„ ์ •๋ฆฌ

2022. 4. 9. 23:53ยท๐Ÿ’ป Programming Language/C#

catch ์ˆœ์„œ ๋’ค์ฃฝ๋ฐ•์ฃฝํ•ด์„œ ํ™•์ธ

class Program
{
    class A
    {
        public int field;
        public static int getField(A obj)
        {
            return obj.field;
        }
    }

    static void Main(string[] args)
    {
        try
        {
            // DivideByZeroException
            int a = 10;
            int b = 0;
            Console.WriteLine(a / b);

            // NullReferenceException
            A obj = null;
            Console.WriteLine(A.getField(obj));

            // IndexOutOfRangeException            
            int[] arr = { 1, 2, 3 };
            for (int i = 0; i < 4; i++)
            {
                Console.WriteLine(arr[i]);
            }
        }

        catch (DivideByZeroException e)
        {
            Console.WriteLine("์—๋Ÿฌ : {0}", e.Message);
        }
        catch (Exception e)
        {
            Console.WriteLine("์—๋Ÿฌ : {0}", e.Message);
        }
        catch (IndexOutOfRangeException e)
        {
            Console.WriteLine("์—๋Ÿฌ : {0}", e.Message);
        }
        catch (NullReferenceException e)
        {
            Console.WriteLine("์—๋Ÿฌ : {0}", e.Message);
        }
        finally
        {
            Console.WriteLine("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ");
        }
    }
}

Output

Output of Upper Code


๋ฐฐ์—ด์— ๋Œ€ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„ => ํ•ด์‹ฑ๊ณผ ๋น„๊ต


๋ฐฐ์—ด

  • ๋ฐฐ์—ด(array)์€ ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ํ•œ ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…

  • ๋ฐฐ์—ด์€ ๋…ผ๋ฆฌ์ ์ธ ์ €์žฅ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ์ˆœ์„œ๊ฐ€ ์ผ์น˜

  • ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค(index)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์›์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

  • ์ธ๋ฑ์Šค๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ์›์†Œ๋ฅผ ๋ฐ”๋กœ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฏ€๋กœ ์›์†Œ๋ฅผ ์ฐพ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1) ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ์ž„์˜ ์ ‘๊ทผ(random access)์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋งํ•œ๋‹ค.

  • ๋ฐ˜๋ฉด์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์‚ฝ์ž…์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์กฐ๊ธˆ ๋ณต์žกํ•ด์ง„๋‹ค.

  • ์‚ญ์ œ์˜ ๊ฒฝ์šฐ ๋จผ์ € ํ•ด๋‹น ์›์†Œ์— ์ ‘๊ทผ์„ ํ•ด์„œ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š”๋ฐ (O(1)), ์ด ์ƒํƒœ๋Š” ๋ฐฐ์—ด์˜ ์—ฐ์†์ ์ธ ํŠน์„ฑ์ด ๊นจ์ง€๊ฒŒ ๋œ๋‹ค.

  • ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๋นˆ ๊ณต๊ฐ„์„ ๋ฉ”๊ฟ”์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์‚ญ์ œํ•œ ์›์†Œ๋ณด๋‹ค ๋” ํฐ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ–๋Š” ์›์†Œ๋“ค์„ shift ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฉฐ, ์ด ๋•Œ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด ๋œ๋‹ค. ์‚ฝ์ž…์˜ ๊ฒฝ์šฐ๋„ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์—ฐ์†๋˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๋งŒ์•ฝ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด, ํฌ๊ธฐ๊ฐ€ ํฐ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๊ธฐ์กด ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(LinkedList)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด ๋ณด์•„์•ผ ํ•œ๋‹ค.


ํ•ด์‹œํ…Œ์ด๋ธ”

  • ํ•ด์‹œํ…Œ์ด๋ธ”(HashTable)์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค๋ฅผ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•˜๊ณ , ์ด ํ•ด์‹œ๊ฐ’์„ ์ธ๋ฑ์Šค ํ˜น์€ ์ฃผ์†Œ๋กœ ์‚ผ์•„์„œ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์„ ํ‚ค์™€ ํ•จ๊ป˜ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

  • ํ•ด์‹œ ํ•จ์ˆ˜๋ž€ ๋ฐ์ดํ„ฐ์˜ ํšจ์œจ์  ๊ด€๋ฆฌ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์ž„์˜์˜ ๊ธธ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ •๋œ ๊ธธ์ด ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  • ์ด ๋•Œ ๋งคํ•‘ ์ „ ์›๋ž˜ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํ‚ค(key), ๋งคํ•‘ ํ›„ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํ•ด์‹œ๊ฐ’(hash value), ๋งคํ•‘ํ•˜๋Š” ๊ณผ์ • ์ž์ฒด๋ฅผ ํ•ด์‹ฑ(hashing)์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • ์ด์™€ ๊ฐ™์ด ํ•ด์‹ฑ์„ ํ•˜๊ฒŒ ๋˜๋ฉด, ์ ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

    • ์˜ˆ๋ฅผ ๋“ค๋ฉด ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ•˜๋“œ๋””์Šคํฌ๋‚˜ ํด๋ผ์šฐ๋“œ์— ์กด์žฌํ•˜๋Š” ๋ฌดํ•œ์— ๊ฐ€๊นŒ์šด ๋ฐ์ดํ„ฐ(ํ‚ค)๋“ค์„ ์œ ํ•œํ•œ ๊ฐœ์ˆ˜์˜ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•จ์œผ๋กœ์จ ์ž‘์€ ํฌ๊ธฐ์˜ ์บ์‰ฌ ๋ฉ”๋ชจ๋ฆฌ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์–ธ์ œ๋‚˜ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๊ณ , ์ธ๋ฑ์Šค๋งŒ ์•Œ๋ฉด ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์•„๋ฌด๋ฆฌ ์ปค๋„ ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.(๋ฐฐ์—ด๊ณผ ์œ ์‚ฌ)

  • ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์„ ์ง€ํ–ฅํ•˜๋Š” ์ƒ์ˆ˜์— ๊ฐ€๊นŒ์šด ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

  • ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ํƒ์ƒ‰์‹œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๋งŽ์ด ํ• ๋‹นํ•ด ๋‘์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฐ„ํšจ์œจ์ ์ด๋ผ๊ณ  ๋ณด๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.

  • ์ด๋Ÿฐ ํ•ด์‹œ ํ…Œ์ด๋ธ”์—๋„ ๋‹จ์ ์ด ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํ‚ค์— ๋Œ€ํ•ด ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ถฉ๋Œ(collision)ํ˜„์ƒ์ด ์ผ์–ด๋‚œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

  • ๋ณดํ†ต ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋ฉด, *** ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ(m)๊ฐ€ ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค ๊ฐœ์ˆ˜(n)๋ณด๋‹ค ์ ์–ด์•ผ ํ•˜๋Š”๋ฐ(๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค ๋ฌธ์ œ ๋“ฑ), ์ด ๋•Œ n/m์„ load factor(ฮฑ)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. load factor๊ฐ€ ํด ์ˆ˜๋ก ํ•ด์‹œ ์ถฉ๋Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.


  • ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๋ฐฉ๋ฒ•๋“ค์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์ธ ๋‘ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋Š” ๋ถ„๋ฆฌ ์—ฐ๊ฒฐ๋ฒ•(seperate chaining)๊ณผ ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•(open addressing)์ด๋‹ค.

Separate_Chaining

[Serparate_Chaining](์ถœ์ฒ˜ : ratsgo ๊นƒํ—™ ๋ธ”๋กœ๊ทธ)

  • ๋จผ์ € ๋ถ„๋ฆฌ ์—ฐ๊ฒฐ๋ฒ•์„ ์‚ดํŽด๋ณด๋ฉด ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท๋‹น ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์—”ํŠธ๋ฆฌ์˜ ์ˆ˜์— ์ œํ•œ์„ ๋‘์ง€ ์•Š์Œ์œผ๋กœ์„œ, ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ํ•ด์‹œํ…Œ์ด๋ธ”์— ๋‹ด๋Š” ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ๋ฒ„ํ‚ท์— ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์™€ ๋…ธ๋“œ๋ฅผ ์ฒด์ธ์ฒ˜๋Ÿผ ์—ฐ๊ฒฐํ•œ๋‹ค๋Š” ์˜๋ฏธ์—์„œ chaining์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ๋ถ™์€ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ์ด ๋ฐฉ๋ฒ•์˜ ์žฅ์ ์€ ์œ ์—ฐํ•˜๋ฉฐ, ์‚ญ์ œ ๋ฐ ์‚ฝ์ž…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(1)์œผ๋กœ ๋น ๋ฅด๋‹ค๋Š” ์ ์ด ์žˆ๋‹ค. ๋ฐ˜๋ฉด, ๋‹จ์ ์€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ž์ฒด์˜ ์ œํ•œ์ด ์—†๋‹ค๋ณด๋‹ˆ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ถ€๋‹ด์ด ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.
    • ์˜ค๋ฒ„ํ—ค๋“œ(overhead)๋Š” ์–ด๋–ค ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๋“ค์–ด๊ฐ€๋Š” ๊ฐ„์ ‘์ ์ธ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ยท ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์„ ๋งํ•œ๋‹ค.

Open_Addressing

[Open_Addressing](์ถœ์ฒ˜ : ratsgo ๊นƒํ—™ ๋ธ”๋กœ๊ทธ)

  • ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•์€ ํ•œ ๋ฒ„ํ‚ท๋‹น ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์—”ํŠธ๋ฆฌ๊ฐ€ ํ•˜๋‚˜๋ฟ์ธ ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด๋‹ค.
  • ํ•ด์‹œํ•จ์ˆ˜๋กœ ์–ป์€ ์ฃผ์†Œ๊ฐ€ ์•„๋‹Œ, ๋‹ค๋ฅธ ์ฃผ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•œ๋‹ค๋Š” ์ทจ์ง€์—์„œ open addressing์ด๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™์€ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.
  • ์ด ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ, ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด (์‚ฝ์ž…ํ•˜๋ ค๋Š” ํ•ด์‹œ ๋ฒ„ํ‚ท์ด ์ด๋ฏธ ์‚ฌ์šฉ์ค‘์ธ ๊ฒฝ์šฐ) ๋‹ค๋ฅธ ํ•ด์‹œ ๋ฒ„ํ‚ท์— ํ•ด๋‹น ์ž๋ฃŒ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
  • ์ด ๋•Œ ๋‹ค๋ฅธ ํ•ด์‹œ ๋ฒ„ํ‚ท์„ ์ฐพ๋Š” ํƒ์‚ฌ ๊ณผ์ •์„ probing์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋ถ„๋ฆฌ ์—ฐ๊ฒฐ๋ฒ•์˜ ์žฅ์ ์€ ์บ์‹œ ํšจ์œจ์ด ๋†’๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์€ ์ ์ง€๋งŒ, ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋ถ„๋ฆฌ ์—ฐ๊ฒฐ๋ฒ•์— ๋น„ํ•ด์„œ ๋†’์œผ๋ฉฐ ํŠน์ • ํ•ด์‹œ๊ฐ’์ด ํ‚ค๊ฐ€ ๋ชฐ๋ฆฌ๊ฒŒ ๋˜๋ฉด ํšจ์œจ์„ฑ์ด ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๋–จ์–ด์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

์ฐธ๊ณ  => https://devowen.com/209


๊ธฐ์กด ์ธ๋ฑ์„œ ์ฝ”๋“œ์—์„œ Resize๋ฅผ ํ• ๋•Œ ref ํ‚ค์›Œ๋“œ์‚ฌ์šฉ

  • ref ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ค‘๊ฐ„์—์„œ ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ด๊ณ ์ž ์‚ฌ์šฉ์„ ํ–ˆ์ง€๋งŒ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์–ด๋–ค๊ฒƒ์ด ์ธ์ž๋กœ ๋“ค์–ด์™€ ์–ด๋–ค๊ฒƒ์ด ๋‚˜๊ฐ€๋Š”์ง€ ํ™•์ธ์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜์ƒ ์ข‹์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ ์ •์ ์‹œํ—˜์—์„œ๋Š” refํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ• ๊ฒƒ! => ๋งค๋‰ด์–ผ์—์„œ๋„ ๊ทธ๋ ‡๊ฒŒ ๋‚˜์™€ ์žˆ๋‹ค๊ณ  ํ•˜์‹ฌ.

for{...} ๋‚ด๋ถ€ ๋ณ€์ˆ˜ ์„ ์–ธ - ์Šค์ฝ”ํ”„ ๊ด€๋ จ


์ฝ”๋“œ ์ค‘๊ฐ„์— ๊ฐ™์€ ์ด๋ฆ„์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•  ์‹œ {} ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ํŽธํ•  ์ˆ˜ ์žˆ๋‹ค.


๋ฐ•์‹ฑ & ์–ธ๋ฐ•์‹ฑ


Conqurent Queue


public class ConcurrentQueue<T> : System.Collections.Concurrent.IProducerConsumerCollection<T>, System.Collections.Generic.IEnumerable<T>, System.Collections.Generic.IReadOnlyCollection<T>, System.Collections.ICollection
  • ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ FIFO(์„ ์ž…์„ ์ถœ) ๋ฐฉ์‹์˜ ์ปฌ๋ ‰์…˜์ด๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ ์ฝ”๋“œ
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;

class CQ_EnqueueDequeuePeek
{
   // Demonstrates:
   // ConcurrentQueue<T>.Enqueue()
   // ConcurrentQueue<T>.TryPeek()
   // ConcurrentQueue<T>.TryDequeue()
   static void Main ()
   {
      // Construct a ConcurrentQueue.
      ConcurrentQueue<int> cq = new ConcurrentQueue<int>();

      // Populate the queue.
      for (int i = 0; i < 10000; i++)
      {
          cq.Enqueue(i);
      }

      // Peek at the first element.
      int result;
      if (!cq.TryPeek(out result))
      {
         Console.WriteLine("CQ: TryPeek failed when it should have succeeded");
      }
      else if (result != 0)
      {
         Console.WriteLine("CQ: Expected TryPeek result of 0, got {0}", result);
      }

      int outerSum = 0;
      // An action to consume the ConcurrentQueue.
      Action action = () =>
      {
         int localSum = 0;
         int localValue;
         while (cq.TryDequeue(out localValue)) localSum += localValue;
         Interlocked.Add(ref outerSum, localSum);
      };

      // Start 4 concurrent consuming actions.
      Parallel.Invoke(action, action, action, action);

      Console.WriteLine("outerSum = {0}, should be 49995000", outerSum);
   }
}

๋‚˜์ค‘์— ์Šค๋ ˆ๋“œ & ํƒœ์Šคํฌ์—์„œ ์ฑ…์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค. ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•œ ๋’ค ์—๋Ÿฌ๋ฅผ ์žก์•„๋ณด์ž


yield ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ Interface๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š”์ด์œ ์— ๋Œ€ํ•ด์„œ..

  • Program Counter(PC) ๊ฐœ๋…์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ํ•œ๋ฒˆ ์ฐพ์•„๋ณด์ž

  • ๋ฐ˜ํ™˜ ํ˜•์‹์ด IEnumerable , IEnumerable<T> , IEnumerator ๋˜๋Š” IEnumerator<T> ๋ฉ”์„œ๋“œ์— yield ํ‚ค์›Œ๋“œ๋ฅผ ๋„ฃ์œผ๋ฉด ๋ฐ˜ํ™˜ ํ˜•์‹ ( IEnumerable ๋˜๋Š” IEnumerator )์˜ ๊ตฌํ˜„์„ ์ƒ์„ฑํ•˜๋„๋ก ์ปดํŒŒ์ผ๋Ÿฌ์— ์ง€์‹œํ•œ๋‹ค.

  • yield ํ‚ค์›Œ๋“œ๋Š” ์ด๋ก ์ ์œผ๋กœ ๋ฌด์ œํ•œ ์‹œํ€€์Šค์˜ "๋‹ค์Œ"์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๋ฏ€๋กœ ์‚ฌ์ „์— ์ „์ฒด ์‹œํ€€์Šค๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— ์ „์ฒด ๊ฐ’ ์‹œํ€€์Šค๋ฅผ ๊ณ„์‚ฐํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ์ผ์‹œ ์ค‘์ง€๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • yield break ๋Š” ๋˜ํ•œ ์–ธ์ œ๋“ ์ง€ ์„œ์—ด์„ ์ข…๊ฒฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

  • yield ํ‚ค์›Œ๋“œ๋Š” IEnumerable<T> ์™€ ๊ฐ™์€ ๋ฐ˜ํ™˜ ์œ ํ˜•์œผ๋กœ ๋ฐ˜๋ณต๊ธฐ ์ธํ„ฐํŽ˜์ด์Šค ์œ ํ˜•์„ ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— Task<IEnumerable<T>> ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ์—์„œ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

'๐Ÿ’ป Programming Language > C#' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

6๋ฒˆ์งธ ์Šคํ„ฐ๋””  (0) 2022.04.09
5๋ฒˆ์งธ ์Šคํ„ฐ๋””  (0) 2022.04.09
3๋ฒˆ์งธ ์Šคํ„ฐ๋”” ์ดํ›„ ์ •๋ฆฌ  (0) 2022.04.09
์Šคํ„ฐ๋””) ๋‘๋ฒˆ์งธ ์Šคํ„ฐ๋”” ํ”ผ๋“œ๋ฐฑ ๋ฐ ์งˆ๋ฌธ ์ •๋ฆฌ๋‚ด์šฉ  (0) 2022.04.08
์Šคํ„ฐ๋””) ์ฒซ๋ฒˆ์งธ ์Šคํ„ฐ๋”” ํ”ผ๋“œ๋ฐฑ ๋ฐ ์งˆ๋ฌธ ์ •๋ฆฌ๋‚ด์šฉ  (0) 2022.04.08
'๐Ÿ’ป Programming Language/C#' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • 6๋ฒˆ์งธ ์Šคํ„ฐ๋””
  • 5๋ฒˆ์งธ ์Šคํ„ฐ๋””
  • 3๋ฒˆ์งธ ์Šคํ„ฐ๋”” ์ดํ›„ ์ •๋ฆฌ
  • ์Šคํ„ฐ๋””) ๋‘๋ฒˆ์งธ ์Šคํ„ฐ๋”” ํ”ผ๋“œ๋ฐฑ ๋ฐ ์งˆ๋ฌธ ์ •๋ฆฌ๋‚ด์šฉ
S.Honey
S.Honey
  • S.Honey
    Algo ์“ฐ์ž
    S.Honey
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (123)
      • ํšŒ๊ณ  (0)
        • ์ทจ์—… ํ›„ ํšŒ๊ณ  (0)
      • ๐Ÿƒ Frontend Road-Map (2)
        • ๐Ÿšฉ Summary (1)
        • ๐Ÿ“š Road-Map Contents (1)
        • ๐ŸŸง HTML (0)
        • ๐ŸŸฆ CSS (0)
        • ๐ŸŸจ Javascript (0)
        • โฌœ React (0)
        • ๐ŸŸช Redux (0)
      • Backend (0)
        • QueryDSL (0)
      • ๐Ÿ’ป Programming Language (54)
        • C# (51)
        • Flutter-Dart (3)
        • Java (0)
      • ๐Ÿ“š Computer Science (4)
        • Algorithms (4)
        • Database (0)
        • Network (0)
        • Operating System(OS) (0)
      • ๐Ÿ’ฏ CodingTest (60)
        • BaekJoon (22)
        • Programmers (34)
        • CodeTree (4)
      • โœ’๏ธ Design Pattern (1)
      • ๐Ÿฑ Etc (2)
        • Jenkins Plugin ์ œ์ž‘๊ธฐ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

    • ๊ณต์ง€์‚ฌํ•ญ

      • ๐Ÿ“– ๊ณต๋ถ€ ์ฐธ๊ณ  ๊ต์žฌ ๋ฐ ์ž๋ฃŒ
    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      ๋ฌธ์ž์—ด ํŒŒ์‹ฑ
      Flutter
      ์‹œ๋ฎฌ๋ ˆ์ด์…˜
      programmers
      BFS
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      DART
      JavaScript
      ์ž๋ฃŒ๊ตฌ์กฐ
      Java
      ๋ฐฑ์ค€
      ์นด์นด์˜ค
      ์ด์ง„ํƒ์ƒ‰
      JS
      BAEKJOON
      Algorithm
      sort
      ์“ฐ์…จ์ž–์•„
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
      DP
      c#
      ํŒŒ์ด์ฌ
      ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
      ์Šคํ„ฐ๋””
      ๊ตฌํ˜„
      ์‚ผ์„ฑsw์—ญํ…Œ
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      ์ฝ”๋“œํŠธ๋ฆฌ
      ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰
      ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
    S.Honey
    4๋ฒˆ์งธ ์Šคํ„ฐ๋”” ์ดํ›„ ์ •๋ฆฌ
    ์ƒ๋‹จ์œผ๋กœ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”