๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90

๐Ÿ–ฅ๏ธ135

[C#] ์Šค๋ ˆ๋“œ์˜ ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜(Critical Section) public static void IncrementCounter() { for (int i = 0; i < 100000; i++) { counter++; } } ์œ„ ๋ฉ”์„œ๋“œ๋Š” counter์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ 100,000๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ 1์”ฉ ์˜ฌ๋ฆฌ๋Š” ์ž‘์—…์„ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด counter ๋ณ€์ˆ˜๋ฅผ ๊ฐ™์ด ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์ด ์‹œ์ž‘๋˜์—ˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. Thread t1 = new Thread(IncrementCounter); Thread t2 = new Thread(IncrementCounter); t1.Start(); t2.Start(); t1.Join(); t2.Join(); t1 ์Šค๋ ˆ๋“œ๋„ 100,000, t2 ์Šค๋ ˆ๋“œ๋„ 100,000์„ ์˜ฌ๋ ค์„œ count๋Š” 200,000์ด ๋˜์–ด์•ผํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์‹ค์ œ๋กœ ์‹คํ–‰์‹œ์ผœ๋ณด๋ฉด ๋งค๋ฒˆ ๋‹ค.. 2023. 10. 11.
[C#] ์Šค๋ ˆ๋“œ(Thread) ์Šค๋ ˆ๋“œ(Thread) ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์€ ๋ง ๊ทธ๋Œ€๋กœ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๊ณผํ•œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์€ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค๊ณ , ๊ตฌํ˜„์ด ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ์Šค๋ ˆ๋“œ ์‹œ์ž‘ํ•˜๋Š” ๋ฒ• 1. Thread ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ 2. Thread.Start()๋กœ ์Šค๋ ˆ๋“œ ์‹œ์ž‘ 3. Thread.Join()์œผ๋กœ ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ ๋Œ€๊ธฐ // No Parameter Thread thread = new Thread(Run); thread.Start(); thread.Join(); // Parameter exist Thread thread2 = new Thread(.. 2023. 10. 11.
[C#] ๋ฆฌํ”Œ๋ ‰์…˜(Reflection): ๋™์  ๋ฉ”์„œ๋“œ ์ƒ์„ฑํ•˜๊ธฐ Reflection ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ™œ์šฉํ•˜๋ฉด ๋™์ ์œผ๋กœ ๋ฉ”์„œ๋“œ๋„ ์ƒ์„ฑํ•˜๊ณ , ๋™์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 1. Assembly ๋งŒ๋“ค๊ธฐ AssemblyBuilder assembly = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("CalculatorAssembly"), AssemblyBuilderAccess.Run); 2. Assembly ์•ˆ์— Module ๋งŒ๋“ค๊ธฐ ModuleBuilder module = assembly.DefineDynamicModule("CalculatorModule"); 3. Module ์•ˆ์— Class ๋งŒ๋“ค๊ธฐ TypeBuilder type = module.DefineType("CalculatorClass"); .. 2023. 10. 11.
[C#] ๋ฆฌํ”Œ๋ ‰์…˜(Reflection): ๋™์  ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•˜๊ธฐ Reflection ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ด์šฉํ•ด์„œ ๋™์  ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธํ•ด์ฃผ๋ฉด ๋œ๋‹ค. object a = Activator.CreateInstance(Type); ์ด๋ฒˆ์—๋„ Inventory๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ Inventory ์ธ์Šคํ„ด์Šค๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•ด๋ณด์ž. class Inventory { private string product; private int count; public Inventory() { product = ""; count = 0; } public Inventory(string product, int count) { this.product = product; this.count = count; } public void Print() { Console.WriteLine($.. 2023. 10. 10.
[C#] ๋ฆฌํ”Œ๋ ‰์…˜(Reflection) Reflection ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฆฌํ”Œ๋ ‰์…˜(Reflection)์€ '๋ฐ˜์‚ฌ'๋ผ๋Š” ๋œป์ด๋‹ค. ๋ฐ˜์‚ฌ๋˜๋ฉด ์ž์‹ ์˜ ๋ชจ์Šต์ด ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, C#์—์„œ ๋ฆฌํ”Œ๋ ‰์…˜์€ ์ž๊ธฐ ์ž์‹ ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ˜์‚ฌํ•˜๋“ฏ์ด ๋ณด๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•œ๋‹ค. ๋‹ค์‹œ ์ •ํ™•ํžˆ ์ •๋ฆฌํ•˜์ž๋ฉด, ๋ฆฌํ”Œ๋ ‰์…˜์ด๋ž€ ๋Ÿฐํƒ€์ž„ ์ค‘์— ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๊ฐ์ฒด์˜ ํ˜•์‹ ์ด๋ฆ„, ํ”„๋กœํผํ‹ฐ, ๋ฉ”์„œ๋“œ, ํ•„๋“œ, ์ด๋ฒคํŠธ ๋“ฑ ๊ทธ ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ๋“ค์—ฌ๋‹ค๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ์— ๊ด€ํ•œ ๋ฐ์ดํ„ฐ์ด๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช…, ๊ตฌ์กฐ, ์†์„ฑ ๋˜๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งํ•œ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜์ด ํ•„์š”ํ•œ ์ด์œ  ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฆฌํ”Œ๋ ‰์…˜์€ ์™œ ํ•„์š”ํ•œ ๊ฒƒ์ผ๊นŒ? ๋ฆฌํ”Œ๋ ‰์…˜์€ ์ฃผ๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ๋•Œ ๋งŽ์ด ์“ฐ์ธ๋‹ค. ์ฝ”๋“œ์˜ ๊ฐ ๋ถ€๋ถ„์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ๋•Œ, ์šฐ๋ฆฌ๋Š” ๊ทธ ๋ฉ”์„œ.. 2023. 10. 10.
[์ด๊ฒƒ์ด C#์ด๋‹ค] Chapter15: ์—ฐ์Šต๋ฌธ์ œ (LINQ) 1. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, Cost๋Š” 50์ด์ƒ, MaxSpeed๋Š” 150 ์ด์ƒ์ธ ๋ ˆ์ฝ”๋“œ๋งŒ ์กฐํšŒํ•˜๋Š” LINQ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”. class Car { public int Cost { get; set; } public int MaxSpeed { get; set; } } class MainApp { static void Main(string[] args) { // ... Car[] cars = { new Car(){Cost= 56, MaxSpeed= 120}, new Car(){Cost= 70, MaxSpeed= 150}, new Car(){Cost= 45, MaxSpeed= 180}, new Car(){Cost= 32, MaxSpeed= 200}, new Car(){Cost= 82, MaxSpeed.. 2023. 10. 5.
[C#] ๋žŒ๋‹ค์‹๊ณผ Func, Action ๋Œ€๋ฆฌ์ž ๋žŒ๋‹ค์‹ ์„ ์–ธํ•˜๋Š” ๋ฒ• ๋žŒ๋‹ค์‹์€ ๊ธฐ๋ณธ์ ์œผ๋กœ (๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก) => ์‹ ํ˜น์€ {์ฝ”๋“œ๋ธ”๋ก} ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ์•„๋ž˜ ๋‘ ์ฝ”๋“œ๋Š” ๊ฐ™์€ ๋ฌด๋ช… ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. HelloWorld H = delegate(int a, int b) { return a + b; } HelloWorld H = (a, b) => a + b; Func ๋Œ€๋ฆฌ์ž Func ๋Œ€๋ฆฌ์ž๋Š” ์ตœ๋Œ€ 16๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. (0๊ฐœ ~ 17๊ฐœ) Func addOne = (int x) => x + 1; int result1 = addOne(5); // 6 ๋ณดํ†ต์€ Func๋ผ๊ณ  ์„ ์–ธํ•˜๊ธฐ ๋ณด๋‹ค๋Š”, var๋กœ ์„ ์–ธํ•œ๋‹ค. var addTwo = (int x) => x + 2; int result2 = addTwo(5); // 7 Action ๋Œ€๋ฆฌ์ž .. 2023. 9. 18.
[C#] ๋Œ€๋ฆฌ์ž(delegate)์™€ ์ด๋ฒคํŠธ deligate (๋Œ€๋ฆฌ์ž) delegate๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋ณ€์ˆ˜์ฒ˜๋Ÿผ delegate์— ๋ฉ”์„œ๋“œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ delegate๋Š” delegate int MathOperation(int a, int b); int ๋‘ ๊ฐœ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ณ , ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. int Add(int a, int b) { return a + b; } int Subtract(int a, int b) { return a - b; } Add์™€ Substract ๋ฉ”์„œ๋“œ๋Š” ๋‹ค๋ฅด์ง€๋งŒ, ๋‘˜ ๋‹ค ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ intํ˜• 2๊ฐœ๋ฅผ ๋ฐ›๊ณ , intํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— delegate MathOperation์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. delegate๋Š” ์„ ์–ธํ•˜๊ณ  ์„ ์–ธํ•œ ๋งค๊ฐœ๋ณ€.. 2023. 9. 10.
728x90

"); wcs_do();