ํด๋์ค๋ ๊ฐ์ฒด์ ์ฒญ์ฌ์ง, ์ธํฐํ์ด์ค๋ ํด๋์ค์ ์ฒญ์ฌ์ง
์ธํฐํ์ด์ค๋ ํด๋์ค๊ฐ ํด์ผํ๋ ํ๋(์ฆ, ๋ฉ์๋)์ ๊ฒฐ์
์ธํฐํ์ด์ค๋ (๊ธฐ๋ณธ์ ์ผ๋ก) ๋ฉ์๋ ๊ตฌํ์ ๊ฐ์ง ์์
์ธํฐํ์ด์ค๋ ํ๋๋ฅผ ๊ฐ์ง ์์
์ธํฐํ์ด์ค๋ ์ฝ์์ด๋ค.
์๋ํ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ์ค์ฒด ํด๋์ค๋ ๋ฐ๋์ ์ธํฐํ์ด์ค์์ ์ ์ธ๋ ๋ฉ์๋๋ฅผ ๋ชจ๋ ๊ตฌํํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ค์ฒด ํด๋์ค๊ฐ ์ด๋ค ์ธํฐํ์ด์ค์ ํ์ ํด๋์ค์ธ์ง๋ฅผ ์๊ณ ์๋ค๋ฉด ๊ทธ ํด๋์ค๊ฐ ์ด๋ค 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();
}
}
}
'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 |