250x250
Rainbow๐ŸŒˆCoder
My dev Note๐Ÿ“’
Rainbow๐ŸŒˆCoder
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (411)
    • ๊ณต์ง€์‚ฌํ•ญ (0)
    • Debugger (10)
      • Visual Studio Debugger (1)
      • Chrome DevTools (3)
      • Visual Studio Code Debugger (4)
      • eclipse (1)
      • intelliJ (1)
    • OOP (2)
      • OOP (2)
    • TypeScript (54)
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ TypeScript (54)
    • Javascript (87)
      • Javascript (45)
      • Node.js (19)
      • React (5)
      • FE ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ค์ • (3)
      • React์™€ Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ (6)
      • next.js (2)
      • pixi.js (7)
    • ๋งˆํฌ์—… (23)
      • Html & Css (23)
    • C# (80)
      • C# (12)
      • ์ด๊ฒƒ์ด C#์ด๋‹ค (68)
    • C++ (30)
      • c++ (27)
      • win api (3)
    • Unity (18)
      • Unity(๊ธฐ์ดˆ) (8)
      • Unity(C#์ค‘๊ธ‰) (5)
      • ์œ ๋‹ˆํ‹ฐ ํฌํ†ค(๋„คํŠธ์›Œํฌ) (4)
      • unity c# MyCode (1)
    • Java & Spring (29)
      • Java (11)
      • ์Šคํ”„๋ง (8)
      • Java Algorithm (9)
      • Javs Data Structures (1)
    • ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (15)
      • ์ž๋ฃŒ๊ตฌ์กฐ (5)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
    • ํ˜•์ƒ๊ด€๋ฆฌ (15)
      • Git (11)
      • ์†Œ์ŠคํŠธ๋ฆฌ (3)
    • ๊ทธ๋ž˜ํ”ฝ์Šค (7)
      • WebGl (7)
    • AWS (3)
      • aws (3)
    • ๋ฆฌ๋ˆ…์Šค (5)
      • ๋ฆฌ๋ˆ…์Šค (5)
    • ์ฑ… ๋ฆฌ๋ทฐ (13)
      • ํด๋ฆฐ์ฝ”๋“œ(์ฑ…๋ฆฌ๋ทฐ) (3)
      • ์œ ์ง€๋ณด์ˆ˜๊ฐ€๋Šฅํ•œ์ฝ”๋”ฉ์˜๊ธฐ์ˆ C#ํŽธ(์ฑ…๋ฆฌ๋ทฐ) (1)
      • ๋ฆฌํŒฉํ† ๋ง(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธํŒ) (9)
    • Server (2)
      • ๊ฒŒ์ž„ ์„œ๋ฒ„(๋„คํŠธ์›Œํฌ, ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ,OS) (2)
    • ์„ค๊ณ„, ์•„ํ‚คํ…์ณ (4)
    • ํŒŒ์ด์ฌ (5)
    • ๋””์ž์ธํŒจํ„ด (2)
    • mocha (2)
    • Jest (1)
    • Spine (1)
    • ์ธ๊ณต์ง€๋Šฅ (1)
      • ํ˜ผ์ž๊ณต๋ถ€ํ•˜๋Š”๋จธ์‹ ๋Ÿฌ๋‹+๋”ฅ๋Ÿฌ๋‹ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ใ…ฃใ„ท
  • ์ปดํฌ์ง€์…˜
  • MySQL
  • ์œ„์ž„

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Rainbow๐ŸŒˆCoder

My dev Note๐Ÿ“’

33. ์ธํ„ฐํŽ˜์ด์Šค(1)
C#/์ด๊ฒƒ์ด C#์ด๋‹ค

33. ์ธํ„ฐํŽ˜์ด์Šค(1)

2022. 2. 14. 18:58
728x90

https://youtu.be/8NhvqLl-o2A

ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด์˜ ์ฒญ์‚ฌ์ง„, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํด๋ž˜์Šค์˜ ์ฒญ์‚ฌ์ง„

์ธํ„ฐํŽ˜์ด์Šค๋Š” ํด๋ž˜์Šค๊ฐ€ ํ•ด์•ผํ•˜๋Š” ํ–‰๋™(์ฆ‰, ๋ฉ”์†Œ๋“œ)์„ ๊ฒฐ์ •

์ธํ„ฐํŽ˜์ด์Šค๋Š” (๊ธฐ๋ณธ์ ์œผ๋กœ) ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„์„ ๊ฐ–์ง€ ์•Š์Œ

์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•„๋“œ๋ฅผ ๊ฐ–์ง€ ์•Š์Œ

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์•ฝ์†์ด๋‹ค.

์™œ๋ƒํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ์‹ค์ฒด ํด๋ž˜์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์„ ์–ธ๋œ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์‹ค์ฒด ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค ์ธํ„ฐํŽ˜์ด์Šค์˜ ํŒŒ์ƒ ํด๋ž˜์Šค์ธ์ง€๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค public ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€๋„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ [๊ทธ๊ฒƒ์ด ์•ฝ์†์ด๋‹ˆ๊นŒ....(๋‚˜๋ฃจํ† ํ†ค)]

 

์ปค๋„ฅํ„ฐ๋Š” ๋‘ ๋ถ€ํ’ˆ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ค‘๊ฐ„ ๋ถ€ํ’ˆ

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‘ ํด๋ž˜์Šค๋ฅผ ์ด์–ด์ฃผ๋Š” ์ปค๋„ฅํ„ฐ

 

 

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ์ธต ๋” ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์š”์†Œ์ด๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ณ ์ˆ˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

<์ธํ„ฐํŽ˜์ด์Šค์˜ ์„ ์–ธ>

interface ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฆ„
{
	๋ฐ˜ํ™˜ํ˜•์‹ ๋ฉ”์†Œ๋“œ์ด๋ฆ„1(๋งค๊ฐœ๋ณ€์ˆ˜_๋ชฉ๋ก...);
    ๋ฐ˜ํ™˜ํ˜•์‹ ๋ฉ”์†Œ๋“œ์ด๋ฆ„2(๋งค๊ฐœ๋ณ€์ˆ˜_๋ชฉ๋ก...);
    ๋ฐ˜ํ™˜ํ˜•์‹ ๋ฉ”์†Œ๋“œ์ด๋ฆ„3(๋งค๊ฐœ๋ณ€์ˆ˜_๋ชฉ๋ก...);
}

์ธํ„ฐํŽ˜์ด์Šค์˜ ์„ ์–ธ์€ ํด๋ž˜์Šค์™€ ๋น„์Šทํ•ด๋ณด์ด์ง€๋งŒ

๋ฉ”์†Œ๋“œ, ์ด๋ฒคํŠธ, ์ธ๋ฑ์„œ, ํ”„๋กœํผํ‹ฐ๋งŒ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค(๊ตฌํ˜„๋ถ€๋„ ์—†๋‹ค)๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

ํด๋ž˜์Šค๋Š” ์ ‘๊ทผ ์ œํ•œ ํ•œ์ •์ž๋กœ ์ˆ˜์‹ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ private๋กœ ์„ ์–ธ๋˜์ง€๋งŒ,

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ ‘๊ทผ ์ œํ•œ ํ•œ์ •์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ๋ชจ๋“  ๊ฒƒ์ด public์œผ๋กœ ์„ ์–ธ๋œ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธ์Šคํ„ด์Šค๋„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.

(์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†์ง€๋งŒ, ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋‹ค.)

 

๊ทœ์น™

(1) ํŒŒ์ƒ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธ๋œ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ(๋ฐ ํ”„๋กœํผํ‹ฐ)๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

(2) ๋ฉ”์†Œ๋“œ๋“ค์€ public ํ•œ์ •์ž๋กœ ์ˆ˜์‹ํ•ด์•ผ ํ•œ๋‹ค.

-ILogger ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํŒŒ์ƒ ํด๋ž˜์Šค์˜ ์˜ˆ-

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace PosisionalPatern
{
    interface ILogger
    {
        void WriteLog(string message);
    }
    class ConsloeLogger : ILogger
    {
        public void WriteLog(string message)
        {
            WriteLine($"{DateTime.Now.ToLocalTime()} {message}");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            ILogger logger = new ConsloeLogger();
            logger.WriteLog("Hello, World!");
        }
    }
}

<์ถœ๋ ฅ ๊ฒฐ๊ณผ>

2022-02-14 ์˜คํ›„ 4:28:25 Hello, World!

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํŒŒ์ƒ ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

            ILogger logger = new ConsloeLogger();
            logger.WriteLog("Hello, World!");

 

์œ„์™€ ๊ฐ™์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธ์Šคํ„ด์Šค๋Š” ๋ชป ๋งŒ๋“ค์ง€๋งŒ, ์ฐธ์กฐ๋Š” ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ฐธ์กฐ์— ํŒŒ์ƒ ํด๋ž˜์Šค ๊ฐ์ฒด์˜ ์œ„์น˜๋ฅผ ๋‹ด๋Š” ๊ฒƒ์ด๋‹ค.

(ํŒŒ์ƒํด๋ž˜์Šค๋Š” ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋Š˜ ๋ช…์‹ฌํ•˜์ž, ์ด๊ฒƒ์€ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค์˜ ๊ด€๊ณ„์—๋„ ๊ทธ๋Œ€๋กœ ์ ์šฉ๋œ๋‹ค. ์ฆ‰ ์œ„์˜ ์˜ˆ์‹œ์—์„œ Consolelogger์˜ ๊ฐ์ฒด๋Š” ILogger์˜ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์•ผ๊ธฐ์ด๋‹ค.)

 

 

<์ธํ„ฐํŽ˜์ด์Šค ์ž‘๋ช…๋ฒ•>

์ธํ„ฐํŽ˜์ด์Šค์˜ ์ด๋ฆ„ ์•ž์— 'I'๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์ด ๊ด€๋ก€์ด๋‹ค.

 

 

<์ธํ„ฐํŽ˜์ด์Šค๋Š” ์•ฝ์†์ด๋‹ค.>

PC์—์„œ USBํฌํŠธ๊ฐ€ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” PC์™€ ์ฃผ๋ณ€๊ธฐ๊ธฐ๊ฐ€ USB๋ผ๋Š” ์•ฝ์†์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋„ ์†Œํ”„ํŠธ์›จ์–ด ๋‚ด์—์„œ USB ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.(ํด๋ž˜์Šค๊ฐ€ ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ์•ฝ์†)

์ด ์•ฝ์†์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋  ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ• ์ง€๋ฅผ ์ •์˜ํ•œ๋‹ค.

 

๊ฐ€๋ น ์œ„์—์„œ ILogger ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ž์‹ ์œผ๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋  ํด๋ž˜์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ WriteLog()๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค. ์–ด๋–ค ํด๋ž˜์Šค๋“  ILogger๋ฅผ ์ƒ์†๋ฐ›์•„ ILogger์— ์„ ์–ธ๋˜์–ด ์žˆ๋Š” WriteLog() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ILogger์˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

(์•ž์—์„œ ILogger ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ConsoleLogger ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜์—ฌ ์ฝ˜์†”์— ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก WriteLog() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ์ด ์™ธ์—๋„ ์–ผ๋งˆ๋“ ์ง€ ILogger๋ฅผ ์ƒ์†๋ฐ›๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•ด์„œ ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๊ณ  ๋„คํŠธ์›Œํฌ ๋„ˆ๋จธ์— ์žˆ๋Š” ์„œ๋ฒ„์— ์ €์žฅํ•˜๋„๋ก ํŒจํ‚ท์„ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค.)

 

 

<Bug ver.> : ์ •์ƒ์ ์œผ๋กœ ๋Œ์•„๊ฐ€์ง€ ์•Š๋Š” ์ฝ”๋“œ... bin ํŒŒ์ผ์— ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๋ฉ”๋ชจ์žฅ์— ๊ธฐ๋ก์ด ๋‚จ์•„์•ผ ํ•˜๋Š”๋ฐ ๋‚จ์ง€ ์•Š๋Š”๋‹ค.

์›์ธ ๋ฐœ๊ฒฌ X

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
using System.IO;

namespace Interface 
{
    interface ILogger //ConsloeLogger์™€ FileLogger๋Š” ILogger๋ฅผ ์ƒ์†ํ•˜๋ฉฐ, WriteLog() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. 
    {
        void WriteLog(string message);
    }
    class ConsloeLogger : ILogger
    {
        public void WriteLog(string message)
        {
            WriteLine("{0} {1}", DateTime.Now.ToLocalTime(), message);
        }
    }

    class FileLogger : ILogger //์ฝ˜์†์ด ์•„๋‹Œ ํ…์ŠคํŠธ ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ILogger์˜ ํŒŒ์ƒ ํด๋ž˜์Šค
    {
        private StreamWriter writer; //StreamWriter ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•จ

        public FileLogger(string path)
        {
            writer = File.CreateText(path);
            writer.AutoFlush = true;
        }
        public void WriteLog(string message) //์—ญ์‹œ๋‚˜ ILogger๊ฐ€ ์ •ํ•ด๋†“์€ ๊ทœ์น™์„ FileLogger ํด๋ž˜์Šค๊ฐ€ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค.
        {
            WriteLine($"{0} {1}",DateTime.Now.ToShortTimeString(), message);
        }
    }

    class ClimateMonitor //ClimateMonitor ํด๋ž˜์Šจ๋Š” ILogger ํ˜•์‹์˜ ์ฐธ์กฐ logger์„ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์˜จ๋„๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž…๋ ฅ๋ฐ›์•„ ๊ธฐ๋ก
    {
        private ILogger logger;
        public ClimateMonitor(ILogger logger)//logger๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ• ์ง€๋Š” ClimateMonitor() ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ž…๋ ฅ๋œ ๊ฐ์ฒด์— ๋‹ฌ๋ ค์žˆ๋‹ค.
        {
            this.logger = logger;
        }
        public void start()
        {
            while(true)
            {
                Console.Write("์˜จ๋„๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (End ์ž…๋ ฅ ํ›„ ์—”ํ„ฐํ‚ค๋Š” ์ข…๋ฃŒ....): ");
                string temperature = Console.ReadLine();
                if (temperature == "End") 
                    break;
                logger.WriteLog("ํ˜„์žฌ ์˜จ๋„ : "+temperature);
            }
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            //๋‹ค์Œ๊ณผ ๊ฐ™์ด ConsloeLogger ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ์ž์— ์ธ์ˆ˜๋กœ ๋„˜๊ธฐ๋ฉด ClimateMonitor๋Š” ์ฝ˜์†”์— ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ
            //FileLogger ๊ฐ์ฒด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ClimateMonitor ๊ฐ์ฒด์— ๋„˜๊ธฐ๋ฉด ์ด์ œ monitor ๊ฐ์ฒด๋Š” ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค. 
            ClimateMonitor monitor = new ClimateMonitor(new FileLogger("Test.txt"));
            //monitor ๊ฐ์ฒด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— MyLog.txt ๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธด๋‹ค.
            monitor.start();

        }
    }
}

<Bug X version>

 

using System;
using System.IO;

namespace Interface
{
    interface ILogger // ์ธํ„ฐํŽ˜์ด์Šค!
    {
        void WriteLog(string message);
    }

    // ๋‚˜๋Š” Console์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ฒ ๋‹ค.
    class ConsoleLogger : ILogger
    {
        public void WriteLog(string message)
        {
            Console.WriteLine($"{DateTime.Now.ToLocalTime()}, {message}");
        }
    }

    // ๋‚˜๋Š” ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ฒ ๋‹ค.
    class FileLogger : ILogger
    {
        private StreamWriter writer;

        public FileLogger(string path)
        {
            writer = File.CreateText(path);
            writer.AutoFlush = true;
        }

        public void WriteLog(string message)
        {
            writer.WriteLine($"{DateTime.Now.ToLocalTime()}, {message}");
        }
    }

    class ClimateMonitor
    {
        private ILogger logger; // ์–ด๋–ค ๋กœ๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•  ์ง€
        //ILogger์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ํ•„๋“œ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค
        public ClimateMonitor(ILogger logger)
        { //์ด ์ฐธ์กฐ๋ฅผ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์žˆ๋‹ค!
            this.logger = logger;
        }
        public void start()
        {
            while (true)
            {
                Console.WriteLine("์˜จ๋„๋ฅผ ์ž…๋ ฅ : ");
                string temperature = Console.ReadLine();
                if (temperature == "") break;

                // ๋“ฑ๋ก๋œ ๋กœ๊ฑฐ์— message๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.
                logger.WriteLog($"ํ˜„์žฌ ์˜จ๋„ : {temperature}");
            }
        }
    }

    class Program
    {
        static void Main()
        {
            ClimateMonitor monitor = new ClimateMonitor(new FileLogger("MyLog.txt"));
            //ใ„ดvar๋กœ ํ•ด๋„ ๋จ!

            monitor.start();
        }
    }
}

<์œ„ ์Šคํฌ๋ฆฝํŠธ ์ชผ๊ฐœ์„œ ์ƒ๊ฐํ•˜๊ธฐ>


using System;
using System.IO;

namespace Interface
{
    interface ILogger // ์ธํ„ฐํŽ˜์ด์Šค!
    {
        void WriteLog(string message);
    }

    // ๋‚˜๋Š” Console์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ฒ ๋‹ค.
    class ConsoleLogger : ILogger
    {
        public void WriteLog(string message)
        {
            Console.WriteLine($"{DateTime.Now.ToLocalTime()}, {message}");
        }
    }

    // ๋‚˜๋Š” ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ฒ ๋‹ค.
    class FileLogger : ILogger
    {
        private StreamWriter writer;

        public FileLogger(string path)
        {
            writer = File.CreateText(path);
            writer.AutoFlush = true;
        }

        public void WriteLog(string message)
        {
            writer.WriteLine($"{DateTime.Now.ToLocalTime()}, {message}");
        }
    }



    class Program
    {
        static void Main()
        {
            ILogger newFileLog = new FileLogger("OKOKOKOK.txt"); //๊ฐ™์€ ํด๋”์— txt ํŒŒ์ผ ์ƒ์„ฑ!
        }
    }
}
using System;
using System.IO;

namespace Interface
{
    interface ILogger // ์ธํ„ฐํŽ˜์ด์Šค!
    {
        void WriteLog(string message);
    }

    // ๋‚˜๋Š” Console์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ฒ ๋‹ค.
    class ConsoleLogger : ILogger
    {
        public void WriteLog(string message)
        {
            Console.WriteLine($"{DateTime.Now.ToLocalTime()}, {message}");
        }
    }

    // ๋‚˜๋Š” ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ฒ ๋‹ค.
    class FileLogger : ILogger
    {
        private StreamWriter writer;

        public FileLogger(string path)
        {
            writer = File.CreateText(path);
            writer.AutoFlush = true;
        }

        public void WriteLog(string message)
        {
            writer.WriteLine($"{DateTime.Now.ToLocalTime()}, {message}");
        }
    }

    class ClimateMonitor
    {
        private ILogger logger; // ์–ด๋–ค ๋กœ๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•  ์ง€
        //ILogger์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ํ•„๋“œ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค
        public ClimateMonitor(ILogger logger)
        { //์ด ์ฐธ์กฐ๋ฅผ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์žˆ๋‹ค!
            this.logger = logger;
        }
        public void start()
        {
            while (true)
            {
                Console.WriteLine("์˜จ๋„๋ฅผ ์ž…๋ ฅ : ");
                string temperature = Console.ReadLine();
                if (temperature == "") break;

                // ๋“ฑ๋ก๋œ ๋กœ๊ฑฐ์— message๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.
                logger.WriteLog($"ํ˜„์žฌ ์˜จ๋„ : {temperature}");
            }
        }
    }

    class Program
    {
        static void Main()
        {

            ILogger newFileLog = new FileLogger("ILOVEYOU.txt");
            ClimateMonitor monitor = new ClimateMonitor(newFileLog);
            monitor.start();
        }
    }
}
728x90

'C# > ์ด๊ฒƒ์ด C#์ด๋‹ค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

35. ์ธํ„ฐํŽ˜์ด์Šค ๋‹ค์ค‘ ์ƒ์†  (0) 2022.02.15
34. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค  (0) 2022.02.15
์ด๊ฒƒ์ด C#์ด๋‹ค 7์žฅ ์—ฐ์Šต๋ฌธ์ œ ์ฐธ๊ณ   (0) 2022.02.14
32. ํŠœํ”Œ  (0) 2022.02.14
31. ๊ตฌ์กฐ์ฒด, ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ ๊ตฌ์กฐ์ฒด(readonly struct)  (0) 2022.02.14
    'C#/์ด๊ฒƒ์ด C#์ด๋‹ค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • 35. ์ธํ„ฐํŽ˜์ด์Šค ๋‹ค์ค‘ ์ƒ์†
    • 34. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
    • ์ด๊ฒƒ์ด C#์ด๋‹ค 7์žฅ ์—ฐ์Šต๋ฌธ์ œ ์ฐธ๊ณ 
    • 32. ํŠœํ”Œ
    Rainbow๐ŸŒˆCoder
    Rainbow๐ŸŒˆCoder
    ๋ชฐ๋ผ๋„ ๊ฒฐ๊ตญ์€ ์•„๋Š” ๊ฐœ๋ฐœ์ž, ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ์ด ๋˜๊ธฐ ์œ„ํ•œ ๋งค์ผ์˜ ํ•œ๊ฑธ์Œ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”