๊ด€๋ฆฌ ๋ฉ”๋‰ด

Algo ์“ฐ์ž

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

๐Ÿ’ป Programming Language/C#

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

S.Honey 2022. 4. 9. 23:52

ํ˜•๋ณ€ํ™˜๊ณผ ๊ด€๋ จํ•˜์—ฌ ...

  • as ์—ฐ์‚ฐ์ž๋Š” ์ฐธ์กฐํ˜•์—๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๊ธฐ๋ณธ ๊ฐ’ํ˜•์‹์—๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ธฐ๋ณธ ๊ฐ’ ํ˜•์‹์—๋Š” int, byte, char, long ...
  • ๊ธฐ๋ณธ ๊ฐ’ ํ˜•์‹์— nullable => ? ํ‚ค์›Œ๋“œ๋Š” ์„ ์–ธ๋ฌธ์— ๋“ค์–ด๊ฐ€๋Š” ํ‚ค์›Œ๋“œ์ด๊ธฐ์— ์‚ฌ์šฉ๊ฐ€๋Šฅ
  • int => value ํƒ€์ž…
  • INTEGER => reference ํƒ€์ž…
  • string ์€ ๊ธฐ๋ณธ ์ฐธ์กฐํ˜•์ด๋ผ๊ณ  ๋ฌธ์„œ์— ๋‚˜์˜ค๋Š”๋ฐ ์™œ ์•ˆ๋ ๊นŒ??
    • string์€ ์ฐธ์กฐ ํ˜•์‹์ด์ง€๋งŒ string๋Š” ์ฐธ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ string ๊ฐœ์ฒด์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๋„๋ก ์ •์˜๋œ๋‹ค
    • String ๊ณผ string ์˜ ์ฐจ์ด๋Š” ์—†๋‹ค. ๋‹ค๋งŒ string์ด System.String ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌ์„ฑ๋˜์—ˆ๋‹ค. ๋ณดํ†ต string ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ธดํ•œ๋‹ค.
      string a = "hello";
      string b = "h";
      // Append to contents of 'b'
      b += "ello";
      Console.WriteLine(a == b);
      Console.WriteLine(object.ReferenceEquals(a, b));
      Output
      

True
False

- C# ์˜ `string` ์€ ์ฐธ์กฐํ˜•์ด์ง€๋งŒ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” `==`, `!=` ์—ฐ์‚ฐ์— ๋Œ€ํ•ด์„œ `string` ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๋„๋ก ์ •์˜๋˜์—ˆ๋‹ค.
- ์ด๋ฅผ ํ†ตํ•ด ์œ„ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ณ , ๋‘๋ฒˆ์งธ ๊ฒฐ๊ณผ๋Š” `ReferenceEquals`๊ฐ€ `False`๊ฐ€ ๋‚˜์˜จ ์ด์œ ๋Š” ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

<br />

### ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ์ด์œ 
- ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ „์„ฑ ๋ฐ ์‹ ๋ขฐ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•œ ์ด์œ  
- ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ๋Š” ์˜ˆ์™ธ๋ฐœ์ƒ์‹œ ์˜ค๋ฅ˜๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ฃฝ๊ฒŒ๋จ => `์šด์˜์ฒด์ œ(OS)` ๋‹จ์—์„œ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ => ์ด๋ฒคํŠธ ๋ทฐ์–ด๋ฅผ ํ†ตํ•ด๋ณด๋ฉด ์—๋Ÿฌ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋จ
- ํ•˜์ง€๋งŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด `catch`๋ฌธ์— ์˜ํ•ด์„œ ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์–ด๋„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ํ›„ ์ฃฝ์ง€๋Š” ์•Š์Œ

<br />

### `Exception e` ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ธฐ
- ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์—๋Ÿฌ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง => ๊ณผํ•œ ํˆฌ์ž
- ์•ˆํƒ€๋Š” ์ฝ”๋“œ๊ฐ€ ์ƒ๊น€.
- ๋ชจ๋“  ์—๋Ÿฌ๋ฅผ ๋‹ค์žก์•„์„œ ์–ด๋””์„œ ์ƒ๊ธด ๋ฌธ์ œ์ธ์ง€ ํŒŒ์•…์ด ์•ˆ๋จ

<br />

### `throw new Exception(...);`์€ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ
- `Exception` ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ๋„ ํฌ๋ฉด์„œ ์ดํ›„์— ๋ฐฐํฌ์‹œ์—๋Š” ์ฝ”๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ๋„ํ•จ. 
- ๊ฐ„ํ˜น `stack trace`๋ฅผ ํ™•์ธํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด `new Exception` ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๋ถ€๋Š” ์ œ์™ธํ•˜๊ณ  `throw`๋ฌธ๋งŒ ์‚ฌ์šฉํ•ด์„œ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ธฐ๋„ํ•จ => ์ด ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ตœํ›„ ๋ฐฉ๋ฒ• 
  - ํ•ด๋‹น ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ์‹œ์—๋„ ๋ฌธ์ œ์ ์ด ์žˆ๋Š”๋ฐ ์ด๋Š” ์–ด๋–ค ํƒ€์ž…์˜ ์˜ˆ์™ธ์ธ์ง€๊ฐ€ ์ฒดํฌ๊ฐ€ ์•ˆ๋˜๊ณ  ์ด์— ์˜ํ•ด ๋๊นŒ์ง€ ํƒ€๊ณ ์˜ฌ๋ผ๊ฐ€ ํ•ด๋‹น ์˜ˆ์™ธ์™€ ๊ด€๋ จ๋œ `stack trace`๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๊ฒƒ์ž„ 

=> ์• ์ดˆ์— ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ž„ - ์ตœ๋Œ€ํ•œ ๊ฐœ๋ฐœ๊ณผ์ •์—์„œ ๋ฐœ์ƒ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•จ.

<br />

### `when` ํ‚ค์›Œ๋“œ 
- ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ค‘ ํŠน์ •ํ•œ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ํ™•์ธํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉ. 

<br />

### `try-catch` ๋ฌธ 
- ์น˜๋ช…์ ์ธ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ .
- ๋„ˆ๋ฌด ๋‚จ๋ฐœํ•˜๊ฑฐ๋‚˜ ํ•œ๋ฒˆ์— ๋งŽ์€ ์ฝ”๋“œ๋ฅผ `try-catch`๋ฌธ์œผ๋กœ ๋ฌถ๊ฒŒ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์ด ์•ˆ์ข‹์•„์ง„๋‹ค.

<br />

### `reflection` ์œผ๋กœ ํ”„๋กœํผํ‹ฐ ๋‚ด๋ถ€๋™์ž‘ ํ™•์ธํ•ด๋ณด๊ธฐ => ์—ฌ์ญค๋ณด๊ธฐ! 

<br />
-------------------
## ๋‹ค์Œ ๋ฐœํ‘œ์— ํฌํ•จํ•  ๋‚ด์šฉ

<br />

### `catch` ๋ฌธ์—์„œ `return`์„ ํ•˜๊ฒŒ๋˜๋ฉด `finally`๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š”์ง€?
```csharp
class Program
{
    static int divideMethod(int a, int b)
    {
        try
        {
            return a / b;
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine("๋‚˜๋ˆ„๊ธฐ ์˜ˆ์™ธ ๋ฐœ์ƒ");
            throw e;
        }
    }
    static void Main(string[] args)
    {
        try
        {
            Console.WriteLine("a/b ์ˆ˜์‹์—์„œ a ์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜์„ธ์š” : ");
            string aa = Console.ReadLine();
            int a = Convert.ToInt32(aa);

            Console.WriteLine("a/b ์ˆ˜์‹์—์„œ b ์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜์„ธ์š” : ");
            string bb = Console.ReadLine();
            int b = Convert.ToInt32(bb);

            Console.WriteLine($"{a}/{b} = {divideMethod(a, b)}");

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

a/b ์ˆ˜์‹์—์„œ a ์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜์„ธ์š” :
5
a/b ์ˆ˜์‹์—์„œ b ์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜์„ธ์š” :
0
๋‚˜๋ˆ„๊ธฐ ์˜ˆ์™ธ ๋ฐœ์ƒ
์—๋Ÿฌ : Attempted to divide by zero.
ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ
  • catch๋ฌธ์—์„œ return์„ ํ†ตํ•ด ๋ฉ”์†Œ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๋”๋ผ๋„ finally ๋ฌธ์€ ์‹คํ–‰ํ•จ

finally ๋ฌธ ๋‚ด์— return ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–จ๊นŒ?

  • CS0157 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • return ๋ฌธ์ด๋‚˜ continue ๋ฌธ๊ณผ ๊ฐ™์ด ์ œ์–ด๊ฐ€ finally ๋ฌธ์—์„œ ์ œ์–ด๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋™์ž‘์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ์ œ์–ด๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋™์ž‘์˜ ๋Œ€์ƒ์ด finally๋ฌธ ๋‚ด์— ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์ผ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ์•ˆํ• ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ finally ๋ฌธ์— ์˜ํ•ด ์ œ์–ด๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ return๋ฌธ๊ณผ ๊ฐ™์ด ์ •์ƒ์ข…๋ฃŒ ํ•˜๋ ค ํ•œ๋‹ค๋ฉด ์ด๋Š” ๋™์ž‘์ด ์ด์ƒํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

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(NullReferenceException e)
        {
            Console.WriteLine("์—๋Ÿฌ : {0}", e.Message);
        }
        catch (IndexOutOfRangeException e)
        {
            Console.WriteLine("์—๋Ÿฌ : {0}", e.Message);
        }
        catch (Exception e)
        {
            Console.WriteLine("์—๋Ÿฌ : {0}", e.Message);
        }
        finally
        {
            Console.WriteLine("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ");
        }
    }
}
Output

โ…ฐ) ์—๋Ÿฌ : Attempted to divide by zero.

โ…ฑ) ์—๋Ÿฌ : Object reference not set to an instance of an object.

โ…ฒ) ์—๋Ÿฌ : Index was outside the bounds of the array.
  • catch ๋ฌธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด try ๋ธ”๋ก๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด catch๋ธ”๋ก๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค.
  • ๋‹ค์ค‘ catch๋ฌธ์„ ์‚ฌ์šฉ์‹œ Exception ํด๋ž˜์Šค์˜ ๊ณ„์ธต๊ด€๊ณ„์— ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.
  • ์˜ˆ์™ธ์—์„œ ๊ฐ€์žฅ ์ƒ์œ„์— ์žˆ๋Š” ํด๋ž˜์Šค๋Š” Exception ํด๋ž˜์Šค์ด๊ธฐ์— ๊ฐ€์žฅ ์•„๋ž˜์ชฝ์— ์ •์˜ํ•ด์•ผํ•จ
  • Exception ํด๋ž˜์Šค์™€ ๊ฐ™์ด ์ƒ์œ„์— ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฐ€์žฅ ์œ„์— ์ •์˜ํ•˜๋ฉด ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋‹ค์Œ catch๋ฌธ๋ถ€ํ„ฐ๋Š” ๋น„๊ต ์ˆ˜ํ–‰์„ ํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋”ฐ๋ผ์„œ Exception ํด๋ž˜์Šค์˜ ๊ณ„์ธต๊ด€๊ณ„์— ๋”ฐ๋ฅธ catch๋ธ”๋ก ์ˆœ์„œ์— ์œ ์˜ํ•ด์•ผํ•œ๋‹ค.

โญ๏ธโญ๏ธโญ๏ธ ์˜ˆ์™ธ throw ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ด€๋ จ ์„ฑ๋Šฅ ๊ณ ๋ ค ์‚ฌํ•ญ โญ๏ธโญ๏ธโญ๏ธ

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

๋˜ํ•œ ๋ฐ˜ํ™˜ ์ฝ”๋“œ์— ์ถฉ๋ถ„ ํ•œ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ throw ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ์ฝ”๋“œ๋ฅผ ์˜ˆ์™ธ๋กœ ๋ณ€ํ™˜ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ˆ์™ธ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ catch ํ•˜์ง€ ์•Š๊ณ  ๋ฌด์‹œ ํ•œ ๋‹ค์Œ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ„์† ํ•ฉ๋‹ˆ๋‹ค.