์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - C# ๊ธฐ๋ณธ๊ฐœ๋…(2)

2020. 9. 10. 18:42ใ†์ „๊ณต ๊ณผ๋ชฉ/์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - C# ๊ธฐ๋ณธ๊ฐœ๋…(2)

 

1) ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ

๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋Œ€์‹ ํ•ด์„œ ์“ฐ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ๋ฉ”์†Œ๋“œ ํฌ์ธํ„ฐ๋ผ๊ณ ํ•˜๋Š”๋ฐ ๋’ค์— ์•Œ์•„ ๋ณผ ์ด๋ฒคํŠธ์™€ ์Šค๋ ˆ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํ˜•ํƒœ

delegate ๋ฆฌํ„ดํƒ€์ž… ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์ด๋ฆ„(๋งค๊ฐœ๋ณ€์ˆ˜);

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ด delegate๋ฅผ ์™œ ๊ตณ์ด ์‚ฌ์šฉํ• ๊นŒ?

-์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ ์•ˆ์—๋Š” ์ˆ˜์—†์ด ๋งŽ์€ ๋ฉ”์†Œ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๋ฅผ ํฌ๊ด„ํ•ด์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด delegate์ด๋‹ค. 

 

-๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆœ์„œ๋Š” ์ด๋ ‡๋‹ค.

๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์ •์˜ -> ๋ฉ”์†Œ๋“œ ์ •์˜ -> ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๊ฐ์ฒด ์ƒ์„ฑ -> ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๊ฐ์ฒด์— ๋ฉ”์†Œ๋“œ ์—ฐ๊ฒฐ -> ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํ†ตํ•ด ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

 

 

2) ์ด๋ฒคํŠธ

์–ด๋–ค ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ•œ ๊ฒƒ์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๋ฉ”์„ธ์ง€.

์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ํšŒ์›๊ฐ€์ž…์„ ํ•  ๋•Œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ 8์ž์ด์ƒ์ธ๋ฐ 3์ž๋งŒ ์ ์—ˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ๊ทธ๋Ÿผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ 8์ž์ด์ƒ ์ ์œผ๋ผ๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ์ถœ๋ ฅ์ด ๋  ํ…๋ฐ ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์ด ์ด๋ฒคํŠธ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

์ด๋ฒคํŠธ ํ˜•ํƒœ

event ๋ธ๋ฆฌ๊ฒŒ์ดํŠธํƒ€์ž… ์ด๋ฒคํŠธ์ด๋ฆ„;

 

์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์ด๋ ‡๋‹ค.

์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ํ†ตํ•ด์„œ ์–ด๋– ํ•œ ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด ์‚ฌ๊ฑด์˜ ํ†ต์ง€๋กœ ์ธํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ๊ทธ์— ๋Œ€ํ•œ ํ–‰์œ„๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.

๋˜ํ•œ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๊ฐ€ ์ฒด๊ณ„์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

์ด๋ฒคํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆœ์„œ๋Š” ์ด๋ ‡๋‹ค.

-์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ํ˜•ํƒœ์™€ ์ผ์น˜ํ•˜๋Š” ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์ •์˜ -> ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์ด์šฉํ•ด์„œ ์ด๋ฒคํŠธ ์„ ์–ธ -> ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ์ž‘์„ฑ -> ์ด๋ฒคํŠธ์— ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ๋“ฑ๋ก -> ์ด๋ฒคํŠธ ๋ฐœ์ƒ

 

3) ์Šค๋ ˆ๋“œ

์Šค๋ ˆ๋“œ๋ž€?

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ๊ตฌ๊ธ€์„ ์‚ฌ์šฉํ•˜๊ณ  ๋„ค์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ฒŒ์ž„์„ ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ”„๋กœ์„ธ์Šค์ด๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ๋˜์–ด์žˆ๋‹ค. ์Œ์•… ์žฌ์ƒ์— ๋น—๋Œ€์—ˆ์„ ๋•Œ, ํ•œ ์Šค๋ ˆ๋“œ๋Š” ์Œ์•…์„ ์žฌ์ƒํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ๊ฐ€์‚ฌ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋“ฑ ์ด๋Ÿฌํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ์Šค๋ ˆ๋“œ์ด๋‹ค. 

 

๋ฐฉ๊ธˆ ์œ„์—์„œ ๋งํ•œ ๊ฒƒ์ด ''๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ"์ด๋‹ค.

"๋‹จ์ผ ์Šค๋ ˆ๋“œ"๋Š” ์ˆœ์ฐจ ํ”„๋กœ๊ทธ๋žจ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์‹œ์ž‘, ์‹คํ–‰, ์ข…๋ฃŒ์˜ ์ˆœ์„œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

 

์Šค๋ ˆ๋“œ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆœ์„œ๋ฅผ ๋ณด์ž.

-์Šค๋ ˆ๋“œ ๋ชธ์ฒด์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ -> ์ž‘์„ฑ๋œ ๋ฉ”์†Œ๋“œ๋ฅผ ์Šค๋ ˆ๋“œ์‹œ์ž‘ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์— ์—ฐ๊ฒฐ -> ์ƒ์„ฑ๋œ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์ด์šฉํ•ด์„œ ์Šค๋ ˆ๋“œ ๊ฐ์ฒด ์ƒ์„ฑ -> ์Šค๋ ˆ๋“œ ์‹คํ–‰ ์‹œ์ž‘

 

์Šค๋ ˆ๋“œ ์†Œ์Šค ์ฝ”๋“œ

using System;
using System.Threading;
class ThreadApp {
  static void ThreadBody() {
     Console.WriteLine("In the thread body");
     }
  
  public static void main() {
     ThreadStart ts = new ThreadStart(ThreadBody);
     Thread t = new Thread(ts);
     Console.WriteLine("Start of main");
     t.Start();
     Console.WriteLine("End of Main");
     }
   }  
   

 

๋จผ์ € ๋ชธ์ฒด ๋ฉ”์†Œ๋“œ๋ฅผ ๋งจ์œ„์— ์ž‘์„ฑํ•˜๊ณ , ts๋ผ๋Š” ๋ณ€์ˆ˜์— ๋ชธ์ฒด ๋ฉ”์†Œ๋“œ๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Thread ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์ด์šฉํ•ด์„œ t๋ผ๋Š” ์Šค๋ ˆ๋“œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค. ->์‹คํ–‰. 

 

์ถœ๋ ฅ ์ˆœ์„œ๋Š”

start  --> end --> In the thread body ์ˆœ์ด๋‹ค. 

 

4) ์ œ๋„ค๋ฆญ

  • ์ž๋ฃŒํ˜•์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง
  • ํฌ๊ด„ ํด๋ž˜์Šค๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

์ œ๋„ค๋ฆญ ์†Œ์Šค ์ฝ”๋“œ

class Stack<StackType> {
  private StackType[] stack = new StackType[100];
  //...
  
 }

 ์Šคํƒ ๋ณ€์ˆ˜ stk1์™€ stk2๋ฅผ ๊ฐ๊ฐ ์ •์ˆ˜ํ˜• ์Šคํƒ, ์‹ค์ˆ˜ํ˜• ์Šคํƒ์œผ๋กœ ๋งŒ๋“ค์–ด๋ณด์ž.

 Stack<int>stk1 = new Stack<int>();

 Stack<double>stk2 = new Stack<double>();

 

์ด์ฒ˜๋Ÿผ ์ œ๋„ค๋ฆญ์„ ์ด์šฉํ•˜๋ฉด ์œ ๋™์ ์œผ๋กœ <>์•ˆ์˜ ์ž๋ฃŒํ˜•์„ ๋ฐ”๊ฟ€ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.