1. ์ฐธ์กฐ ํ์์ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ ํ ๋น ํ ๋ณํ๋ฅผ ์ฃผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
class MyField
{
public int field1;
public int field2;
}
class AssignRefType
{
public static void addVal(MyField obj)
{
MyField temp = obj;
temp.field1++;
temp.field2++;
}
public static void subVal(MyField obj)
{
MyField temp = obj;
temp.field1--;
temp.field2--;
}
static void Main(string[] args)
{
MyField mf = new MyField() { field1 = 1, field2 = 2 };
MyField mf1 = new MyField() { field1 = 3, field2 = 4 };
MyField mf2 = new MyField() { field1 = 5, field2 = 6 };
AssignRefType.addVal(mf);
AssignRefType.addVal(mf1);
AssignRefType.addVal(mf2);
Console.WriteLine("----------Add----------");
Console.WriteLine("mf : field1 : {0}, field2 : {1}",mf.field1,mf.field2);
Console.WriteLine("mf1 : field1 : {0}, field2 : {1}", mf1.field1, mf1.field2);
Console.WriteLine("mf2 : field1 : {0}, field2 : {1}", mf2.field1, mf2.field2);
AssignRefType.subVal(mf);
AssignRefType.subVal(mf1);
AssignRefType.subVal(mf2);
Console.WriteLine("\n----------Subtract----------");
Console.WriteLine("mf : field1 : {0}, field2 : {1}", mf.field1, mf.field2);
Console.WriteLine("mf1 : field1 : {0}, field2 : {1}", mf1.field1, mf1.field2);
Console.WriteLine("mf2 : field1 : {0}, field2 : {1}", mf2.field1, mf2.field2);
}
}
Output
----------Add----------
mf : field1 : 2, field2 : 3
mf1 : field1 : 4, field2 : 5
mf2 : field1 : 6, field2 : 7
----------Subtract----------
mf : field1 : 1, field2 : 2
mf1 : field1 : 3, field2 : 4
mf2 : field1 : 5, field2 : 6
- stack ๋ฉ๋ชจ๋ฆฌ์ ์๋ ์ฃผ์๊ฐ์ ๋ณต์ฌํด์ ๋ฃ์ด์คฌ๊ธฐ์ ๊ฐ์์ฒด๋ ๋ณํ๋ฅผ ์ค ์ ์์ง๋ง ์์ ํ
static
๋ฉ์๋ ๋ด๋ถ์ ์๋temp
๊ฐ์ฒด์ ์๋ก์ดheap
๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ ๊ฒ์ ์๋.
2. Entity Framework์์ DB Connection ์ข ๋ฃ์ ๊ด๋ จํด ๋ด๋ถ์ ์ผ๋ก ์ข ๋ฃ์๋ฅผ ๋์์ํค๋ ๊ฒ์ธ์ง? (Framework ๋ด๋ถ ๋์ ์กฐ์ฌ.)
- Entity Framework๋ฅผ ์ฌ์ฉํ๋ ์ด์
- DB Connection ์ข ๋ฃ์ ์ ์ข ๋ฃ์๋ฅผ ๋์์ํค๋์ง
- https://docs.microsoft.com/ko-kr/ef/ef6/fundamentals/working-with-dbcontext => ์๋ช ๋ถ๋ถ
- ์๊ฑด ๋ถ์กฑํ๋ฉด ์ด ๋ถ๋ถ ๋ ํ์ธ :
3. OS ๊ด๋ จ => ํ๋ก์ธ์ค๊ฐ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ.
- ํ๋ก์ธ์ค๊ฐ ์ฐจ์งํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ดํด๋ณด๋ฉด ํฌ๊ฒ
Code
,Data
,Heap
,Stack
์ ์์ญ์ผ๋ก ๋๋์ด์ ธ ์๋ค. - ์ด๋ค ๊ฐ๊ฐ์
segment
๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Stack |
---|
โ ์ฌ์ ํ ๋น ๊ณต๊ฐ (for Stack & Heap) โ |
Heap |
Bss (์ด๊ธฐํ ๋์ง ์์ ๋ฐ์ดํฐ) |
Data (์ด๊ธฐํ๋ ๋ฐ์ดํฐ) |
Text |
์ ์ ์ธ๊ทธ๋จผํธ
Text (Code)
- ์ ์ผ ์๋ Text ๋ถ๋ถ์ด ์ฝ๋ ๋ถ๋ถ์ด๋ค.
- ์์ฑํ ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ด๊ณ ๊ธฐ๊ณ์ด๋ ํฌํจ๋๋ค.
- ํด๋น ์์ญ์
read only
์์ญ์ด๊ธฐ์ ์ฐ๊ธฐ ์์ ์ ์๋ํ๋ฉดaccess violation
์ด ๋ฐ์ํ๋ค. - ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ์ ์ง๋๋ ์์ญ์ด๋ค.
Data
์ ์ญ๋ณ์(global)
,์ ์ ๋ณ์(static)
,๋ฐฐ์ด(array)
,๊ตฌ์กฐ์ฒด(struct
) ๋ฑ์ด ์ ์ฅ๋๋ค.- ์ด๊ธฐํ ๋ ๋ฐ์ดํฐ :
Data
์ ์ ์ฅ - ์ด๊ธฐํ ๋์ง ์์ ๋ฐ์ดํฐ :
bss(Block Stated Symbol)
์ ์ ์ฅ
- ์ด๊ธฐํ ๋ ๋ฐ์ดํฐ :
Bss
๋ ์ด๊ธฐํ๋ฅผ ํจ. ๋จ, ๊ฐ์ ์ด๊ธฐํ ํ๋ ๊ฒ์ด ์๋๋ผ, ๋ฉ๋ชจ๋ฆฌ ์์ ๊ณต๊ฐ์ ์ด๊ธฐํ ์ํค๋ ๊ฒ.- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์
Bss
๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ผ๋ก ๋ณด๋ฉด ๋ ํจ์จ์ ์ด๋ผ ํ ์ ์์.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์
์ ๋ฆฌํ์๋ฉด
Data
์์ญ์ด ๋ฐํ์ ์ด์ ์ ์ด๊ธฐํ ํ๋ ๊ฒ์ด๋ผ๋ฉดBss
๋ ๋ฐํ์ ์ดํ์ ์ด๊ธฐํ ํ๋ ๊ฒ.Data
์์ญ๋ ํ๋ก์ธ์ค์ ์ข ๋ฃ์๊น์ง ์ ์ง๋จ.
(์ฃผ์!) ํจ์ ๋ด๋ถ(main ๋ฉ์๋ ํฌํจ)์ ๋ณ์๋ค์ ์ฌ๊ธฐ์ ํด๋น๋์ง ์๋๋ค.
๋์ ์ธ๊ทธ๋จผํธ
Heap
- ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์ ์ผ๋ก ์ฌ์ฉํ๋ ์์ญ์ด๋ค.
malloc
,free
๋๋new
,delete
์ ์ํ์ฌ ํ ๋น ๋๋ ๋ฐํ๋๋ ์์ญ์ด๋ค.- ์๋ฐ๋ C++, C#๊ณผ ๊ฐ์ด
garbage collector
๊ฐ ํ๋ํ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋ฐํ๋๋ ๊ฒฝ์ฐ๋ ์๋ค.
Stack
์ง์ญ๋ณ์
,๋งค๊ฐ๋ณ์
,๋ณต๊ท๋ฒ์ง
๋ฑ์ด ์ ์ฅ๋์ด ์๋ ํ๋ก๊ทธ๋จ์ด ์๋์ผ๋ก ์ฌ์ฉํ๋ ์์ ๋ฉ๋ชจ๋ฆฌ์ด๋ค.- ํจ์ ํธ์ถ ์ ์์ฑ๋๊ณ , ํจ์ ์ข ๋ฃ์ ๋ฐํ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ
Stack
์ผ๋ก๋ถํฐ ์ ์ถ ๊ฐ๋ฅํ๋ฏ์ดLast in First Out(LIFO)
์ ์ฑ ์ ์ฌ์ฉํ๋ค. - ๋ง์ง๋ง์ผ๋ก ๋ค๋ฅธ ์ธ๊ทธ๋จผํธ๋ค์ด ํ์ ์์ญ์ผ๋ก ํ ๋น๋์ง๋ง
Stack
์ธ๊ทธ๋จผํธ๋ ์์์์ญ๋ถํฐ ํ ๋น๋๋ค.
Heap ์์ญ์ด ์ปค์ง๋ฉด Stack ์์ญ์ด ์์์ง๊ฒ ๋๊ณ , ์ญ๋ ์ฑ๋ฆฝ.
- Heap Overflow : Heap์ด Stack์์ญ์ ์นจ๋ฒํ๋ ๊ฒ.
- Stack Overflow : Stack์ด Heap ์์ญ์ ์นจ๋ฒํ๋ ๊ฒ.
[์ฐธ์กฐ] : https://box0830.tistory.com/150
'๐ป Programming Language > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3๋ฒ์งธ ์คํฐ๋ ์ดํ ์ ๋ฆฌ (0) | 2022.04.09 |
---|---|
์คํฐ๋) ๋๋ฒ์งธ ์คํฐ๋ ํผ๋๋ฐฑ ๋ฐ ์ง๋ฌธ ์ ๋ฆฌ๋ด์ฉ (0) | 2022.04.08 |
43. ์ค๋ ๋์ ํ์คํฌ (0) | 2022.04.08 |
42. LINQ ์ธ๋ถ ๋ฌธ๋ฒ (0) | 2022.04.08 |
41. ์ต๋ช Type (0) | 2022.04.08 |