ํ๋ณํ
๊ณผ ๊ด๋ จํ์ฌ ...
- 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 ํ์ง ์๊ณ ๋ฌด์ ํ ๋ค์ ์ฒ๋ฆฌ๋ฅผ ๊ณ์ ํฉ๋๋ค.
'๐ป Programming Language > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
5๋ฒ์งธ ์คํฐ๋ (0) | 2022.04.09 |
---|---|
4๋ฒ์งธ ์คํฐ๋ ์ดํ ์ ๋ฆฌ (0) | 2022.04.09 |
์คํฐ๋) ๋๋ฒ์งธ ์คํฐ๋ ํผ๋๋ฐฑ ๋ฐ ์ง๋ฌธ ์ ๋ฆฌ๋ด์ฉ (0) | 2022.04.08 |
์คํฐ๋) ์ฒซ๋ฒ์งธ ์คํฐ๋ ํผ๋๋ฐฑ ๋ฐ ์ง๋ฌธ ์ ๋ฆฌ๋ด์ฉ (0) | 2022.04.08 |
43. ์ค๋ ๋์ ํ์คํฌ (0) | 2022.04.08 |