¾îÆ®¸®ºäÆ®(Attribute)´Â ÄÄÆÄÀÏ·¯¿¡°Ô Äڵ忡 ´ëÇÑ Ãß°¡ Á¤º¸¸¦
Á¦°øÇÑ´Ù. ÀÌ Á¤º¸´Â ÄÄÆÄÀÏ ¹æ½Ä¿¡ ¿µÇâÀ» Áְųª ½ÇÇà ÆÄÀÏ¿¡ Æ÷ÇÔµÇ¾î ¸®Ç÷º¼ÇÀ¸·Î Á¶»çÇÒ ¼ö ÀÖÀ¸¸ç
ÄÚµå ¹®¼È¿¡µµ »ç¿ëµÈ´Ù. °³¼ö³ª È°¿ë ¿ëµµ¿¡ ´ëÇÑ Á¦¾àÀº ¾ø´Ù. Àû¿ë
´ë»ó¾Õ¿¡ [ ]°ýÈ£¿Í ÇÔ²² ¾îÆ®¸®ºäÆ® ¸íÀ» Àû°í ( ) °ýÈ£
¾È¿¡ Àμö¸¦ ÁöÁ¤ÇÑ´Ù. À̸§¾ø´Â(unnamed, positional)
Àμö¿Í À̸§ÀÖ´Â(named) Àμö°¡ Àִµ¥ ÁöÁ¤ÇÏ´Â ¹æ¹ýÀÌ Á¶±Ý ´Ù¸£´Ù. ±âº» Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
[SomeAttribute(Àμö)]
Ŭ·¡½º, ¸Þ¼µå, ÇÁ·ÎÆÛƼ, Àμö µîµî
½Ã½ºÅÛÀÌ Á¦°øÇÏ´Â °øÅë ¾îÆ®¸®ºäÆ®¿Í »ç¿ëÀÚ°¡ Á¤ÀÇÇÏ´Â Ä¿½ºÅÒ ¾îÆ®¸®ºäÆ®°¡ ÀÖ´Ù.
°øÅë ¾îÆ®¸®ºäÆ®´Â ÁÖ·Î ÄÄÆÄÀÏ ¹æ½Ä¿¡ ¿µÇâÀ» ÁØ´Ù.
¸Þ¼µåÀÇ ÄÄÆÄÀÏ ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù. Àμö·Î ÁöÁ¤ÇÑ ½Éº¼ÀÌ ÀÖÀ¸¸é ¸Þ¼µå¸¦
ÄÄÆÄÀÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é ¹«½ÃÇÑ´Ù. ½Éº¼Àº #define¹®À¸·Î
Á¤ÀÇÇÑ´Ù. ¸Þ¼µå Á¤ÀǺΠ»Ó¸¸ ¾Æ´Ï¶ó È£ÃâºÎ±îÁö °°ÀÌ Á¶°ÇºÎ ó¸®ÇÏ¿© ¾Æ¿¹ ¾ø´Â ÇÔ¼ö·Î ¸¸µé ¼ö ÀÖ´Ù. ´ÙÀ½ Á¶°Ç¿¡ ºÎÇÕÇÏ´Â ¸Þ¼µå¿¡¸¸ ¾µ ¼ö ÀÖ´Ù.
l ÀÎÅÍÆäÀ̽º ¼Ò¼ÓÀÇ ¸Þ¼µå¿¡´Â
¾µ ¼ö ¾ø´Ù. ÀÎÅÍÆäÀ̽º´Â È®Á¤µÈ °è¾àÀ̱⠶§¹®¿¡ Á¶°ÇºÎ·Î ÄÄÆÄÀÏÇؼ´Â ¾ÈµÈ´Ù.
l °¡»ó ¸Þ¼µå¿¡´Â ¾µ
¼ö ÀÖÁö¸¸ ÀçÁ¤ÀǵǴ ¸Þ¼µå¿¡´Â ¾µ ÇÊ¿ä°¡ ¾ø´Ù. °¡»ó ¸Þ¼µå°¡ Á¶°ÇºÎÀ̸é ÀçÁ¤ÀÇµÈ ¸Þ¼µåµµ ÀÚµ¿À¸·Î
Á¶°ÇºÎÀÌ´Ù.
l ¸Þ¼µå°¡ ¾ø¾îµµ ´Ù¸¥
ºÎºÐÀÌ ¿µÇâÀ» ¹Þ¾Æ¼´Â ¾ÈµÈ´Ù. À־ ±×¸¸ ¾ø¾îµµ ±×¸¸À̾î¾ß Çϸç ÇÙ½É ¸Þ¼µå°¡ Á¶°ÇºÎ¿©¼´Â ¾ÈµÈ´Ù. ¸®ÅÏ Å¸ÀÔÀº void¿©¾ß Çϸç Ãâ·Â¿ë Àμöµµ °¡Áú ¼ö ¾ø´Ù.
´ÙÀ½ ¿¹Á¦´Â ¼Î¾î¿þ¾î ÇÁ·Î±×·¥ÀÇ ÇÑ ¿¹Àε¥ TRIAL ½Éº¼ÀÇ Á¤ÀÇ
¿©ºÎ¿¡ µû¶ó TrialMessage ¸Þ¼µåÀÇ ÄÄÆÄÀÏ ¿©ºÎ°¡ °áÁ¤µÈ´Ù.
Trial |
|
#define
TRIAL using
System; using
System.Diagnostics; class CSTest
{ [Conditional("TRIAL")] static
void TrialMessage() { Console.WriteLine("ÀÌ
Á¦Ç°Àº 30ÀÏ°£¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù."); Console.WriteLine("Á¤Ç°À»
±¸ÀÔÇϽ÷Á¸é ¾î¼°í Àú¼°í.\n"); } static
void Main() { TrialMessage(); Console.WriteLine("°ÔÀÓÀ»
½ÃÀÛÇÕ´Ï´Ù."); } } |
|
½ÇÇà°á°ú |
ÀÌ Á¦Ç°Àº 30ÀÏ°£¸¸
»ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¤Ç°À» ±¸ÀÔÇϽ÷Á¸é ¾î¼°í Àú¼°í. °ÔÀÓÀ» ½ÃÀÛÇÕ´Ï´Ù. |
TrialMessage ¸Þ¼µå´Â
Conditional ¾îÆ®¸®ºäÆ®¿¡ ÀÇÇØ TRIAL ½Éº¼ÀÌ Á¤ÀǵǾî ÀÖÀ» ¶§¸¸ ÄÄÆÄÀϵȴÙ. ÀÌ´ë·Î ÄÄÆÄÀÏÇÏ¿© ½ÇÇàÇϸé TrialMessageµµ °°ÀÌ ÄÄÆÄÀϵǸç
ÇÁ·Î±×·¥ ½ÃÀÛ Àü¿¡ °øÂ¥ »ç¿ëÀÚ¸¦ ±ÍÂú°Ô ÇÏ´Â ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù.
¼Ò½º ¼±µÎÀÇ #define TRIALÀ» ÁÖ¼® ó¸®Çϸé TrialMessage ¸Þ¼µå´Â ÄÄÆÄÀÏ ´ë»ó¿¡¼ Á¦¿ÜµÇ¸ç È£Ãâ Äڵ嵵 °°ÀÌ Á¦°ÅµÈ´Ù. ¸Þ½ÃÁö°¡ Ãâ·ÂµÇÁö ¾Ê°í °ð¹Ù·Î °ÔÀÓÀÌ ½ÃÀ۵ȴÙ. µÎ °³ÀÇ Á¶°ÇÀ»
°°ÀÌ ±â¼úÇÏ¸é µÑ Áß Çϳª¶óµµ Á¤ÀǵǾî ÀÖÀ» ¶§ ÄÄÆÄÀϵȴÙ.
[Conditional("TRIAL"),
Conditional("FREE")]
static void TrialMessage() { ... }
TRIALÀ̳ª FREE µÑ
Áß Çϳª¶óµµ Á¤ÀǵǾî ÀÖÀ¸¸é ¸Þ½ÃÁö´Â Ãâ·ÂµÈ´Ù. Áï, µÎ
Á¶°ÇÀº OR·Î ¿¬°áµÈ´Ù. µÎ Á¶°ÇÀ» AND·Î ¿¬°áÇÏ´Â ¹æ¹ýÀº Á¶±Ý ±î´Ù·Î¿îµ¥ µÎ °³ÀÇ ¸Þ¼µå¸¦ Á¤ÀÇÇÏ°í ÇÑ ÂÊ¿¡¼ ´Ù¸¥ ÂÊÀ» È£ÃâÇÑ´Ù.
[Conditional("TRIAL")]
static void TrialMessage() { TrialMessage2(); }
[Conditional("FREE")]
static void TrialMessage2() { ... }
Á¶°ÇºÎ ÄÄÆÄÀÏ ±â´ÉÀº È°¿ë¼ºÀÌ ³ô´Ù. ƯÈ÷ µð¹ö±× ¹öÀü°ú ¸±¸®Áî ¹öÀüÀ»
´Ù¸£°Ô ÀÛ¼ºÇÒ ¶§ ½Ç¿ëÀûÀÌ´Ù. µð¹ö±× ¹öÀüÀÏ ¶§´Â DEBUG ½Éº¼ÀÌ
Á¤ÀǵǹǷΠÀÌ ½Éº¼ÀÌ ÀÖÀ» ¶§ Æ®·¹À̽º Ãâ·Â¹®À̳ª ·Î±× ±â·Ï¹®À» ÀÛ¼ºÇÏ¿© µð¹ö±ë ¿ëµµ·Î ¾µ ¼ö ÀÖ´Ù.
Obsolete ¾îÆ®¸®ºäÆ®´Â °æ°í³ª ¿¡·¯¸¦ ¹ß»ý½ÃÄÑ °ð Æó±âµÉ ±¸½Ä
ÄÚµåÀÓÀ» Ç¥½ÃÇÑ´Ù. ÀÌÀü °ÍÀ» Æó±âÇÏ°í »õ·Î¿î °ÍÀ¸·Î ´ëüÇÏ´õ¶óµµ ±âÁ¸ »ç¿ëÀÚ¸¦ À§ÇØ ÇԺηΠ¾ø¾Ö ¹ö·Á¼´Â
¾ÈµÇ¸ç °èµµ ±â°£ÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ·² ¶§ Obsolete ¾îÆ®¸®ºäÆ®¸¦
ºÙÀ̴µ¥ °ÅÀÇ ´ëºÎºÐÀÇ ¿ä¼Ò¿¡ Àû¿ë °¡´ÉÇÏ´Ù.
[Obsolete("¸Þ½ÃÁö",
error)]
´ë»ó
ù ¹ø° Àμö´Â °æ°í³ª ¿À·ù ¸Þ½ÃÁö ¹®ÀÚ¿À̸ç ÄÄÆÄÀÏ·¯ÀÇ Ãâ·Ââ¿¡ ³ªÅ¸³´Ù. Æó±â
ÀÌÀ¯¿Í ´ëü ¼ö´Ü, Æó±â ½ÃÁ¡À» »ó¼¼ÇÏ°Ô ±â¼úÇÒ ¼ö ÀÖ´Ù. µÎ
¹ø° Àμö´Â ¿À·ù ¹ß»ý ¿©ºÎÀε¥ ÀÌ Àμö°¡ trueÀÌ¸é ¿¡·¯·Î 󸮵Ǿî ÄÄÆÄÀÏÀÌ °ÅºÎµÈ´Ù. falseÀ̰ųª »ý·«ÇÏ¸é °æ°í·Î ó¸®µÇ¾î ´çºÐ°£Àº °è¼Ó ¾µ ¼ö ÀÖ´Ù.
Obsolete |
using
System; using
System.Diagnostics; class CSTest
{ [Obsolete("NewMethod¸¦
»ç¿ëÇϽÿÀ")] static
public void OldMethod() { } static
public void NewMethod() { Console.WriteLine("»õ·Î
¸¸µç ÃÖ½ÅÇü ¸Þ¼µåÀÔ´Ï´Ù."); } [Obsolete("¾ÕÀ¸·Î´Â
ÀÌ ¸Þ¼µå¸¦ ¾²Áö ¸¶½Ã¿À.", true)] static
public void OutDateMethod() { } static
void Main() { OldMethod(); NewMethod(); //
OutDateMethod(); } } |
OldMethod¿¡ Obsolete
¾îÆ®¸®ºäÆ®°¡ ÁöÁ¤µÇ¾î ÀÖ¾î °ð Æó±âµÈ´Ù´Â °Í°ú ´õ È¿À²ÀûÀÎ NewMethod°¡ Á¦°øµÊÀ»
¾Ë¸°´Ù. ÄÄÆÄÀÏÇÏ¸é »ç¿ëÇÏÁö ¸» °Í°ú ´ëü ¼ö´Ü¿¡ ´ëÇÑ Ä£ÀýÇÑ ¾È³» ¸Þ½ÃÁö°¡ Ãâ·Ââ¿¡ ³ªÅ¸³´Ù.
°æ°í CS0618: 'CSTest.OldMethod()'Àº(´Â) »ç¿ëµÇÁö ¾Ê½À´Ï´Ù.
'NewMethod¸¦ »ç¿ëÇϽÿÀ'
°æ°íÀÏ »ÓÀÌ¾î¼ ÄÄÆÄÀÏÀº °¡´ÉÇÏ¸ç ¸Þ½ÃÁö¸¦ ¹«½ÃÇÏ°í °è¼Ó »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª
¾ðÁ¦ Æó±âµÉÁö ¸ð¸£´Ï °¡±ÞÀû Áö½Ã´ë·Î µû¸£´Â °ÍÀÌ ÁÁ´Ù. »ç¿ëÀÚ´Â ÀÌ ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ OldMethod È£Ãâ¹®À» NewMethod È£Ãâ¹®À¸·Î Çϳª µÑ¾¿
¹Ù²Ü °ÍÀÌ´Ù.
OutDateMethod´Â µÎ ¹ø° Àμö°¡ true¿©¼ ¾Æ¿¹ ¿¡·¯·Î 󸮵Ǹç ÁÖ¼®À» Ç®¸é ÄÄÆÄÀÏÀÌ °ÅºÎµÈ´Ù. ¾Æ¿¹
¾ø¾Ö ¹ö¸®´Â °Íµµ ÇÑ ¹æÆíÀÌÁö¸¸ ÀÌ·¸°Ô µÇ¸é »ç¿ëÀÚ´Â ¿Ö ÀÌ ¸Þ¼µå°¡ Æó±âµÇ¾ú´ÂÁö ¾Ë ¼ö ¾øÀ¸¹Ç·Î ´çºÐ°£Àº À¯¿¹ ±â°£À» µÎ´Â °ÍÀÌ ÁÁ´Ù.
°³¹ßÀÚ´Â ±¸Çü ¸Þ¼µå°¡ Àß µ¿ÀÛÇÏ¸é °è¼Ó ¾²´Â °ü¼ºÀÌ ÀÖ´Ù. ´çÀå
Àß µ¹¾Æ°¡¸é ¼Õ º¸±â ±ÍÂú¾Æ ¹æÄ¡ÇÏ´Ù°¡ ¸Þ¼µå°¡ ¾ø¾îÁö¸é ±×¶§¼¾ß ºÎ·ªºÎ·ª »õ·Î¿î ¹æ¹ýÀ» ã´À¶ó ´çȲÇÑ´Ù.
Obsolete´Â Æó±â ¿¹Á¤À» Àû±ØÀûÀ¸·Î ¾Ë·Á ºÎµå·¯¿î ÀÌÀüÀ» À¯µµÇÑ´Ù.
DllImport ¾îÆ®¸®ºäÆ®´Â ¿ÜºÎ
DLLÀÇ ÇÔ¼ö¸¦ ¼±¾ðÇÒ ¶§ »ç¿ëÇÑ´Ù. COM ¶óÀ̺귯¸®ÀÇ ÇÔ¼ö³ª Win32 API ÇÔ¼ö¸¦ »ç¿ëÇÏ°í ½ÍÀ» ¶§ ÀÌ ¾îÆ®¸®ºäÆ®·Î ¾î¶² DLL¿¡
ÀÖ´Â ÇÔ¼öÀÎÁö ¹àÈù´Ù. ´ÙÀ½ ¿¹Á¦´Â µÎ °³ÀÇ API ÇÔ¼ö¸¦
È£ÃâÇÑ´Ù.
DllImport |
using
System; using
System.Runtime.InteropServices; class CSTest
{ [DllImport("User32.dll")] public
static extern int MessageBox(int hParent, string Message, string Caption, int
Type); [DllImport("Kernel32.dll")] public
static extern uint WinExec(string Path, uint nCmdShow); static
void Main() { MessageBox(0,
"¸Þ¸ðÀåÀ» ½ÇÇàÇÕ´Ï´Ù.", "¾Ë¸²", 0); WinExec("notepad.exe",
1); } } |
¸Þ½ÃÁö ¹Ú½º¸¦ ¿°í ¸Þ¸ðÀåÀ» ½ÇÇàÇÏ·Á¸é MessageBox¿Í WinExec API ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. MessageBox´Â User32.dll¿¡ ÀÇÇØ Á¦°øµÇ¸ç WinExec´Â Kernel32.dll¿¡ ÀÇÇØ Á¦°øµÈ´Ù. µÑ ´Ù ´å³Ý ¿ÜºÎÀÇ DLL¿¡ Á¤ÀǵǾî ÀÖ¾î extern ÁöÁ¤ÀÚ¸¦ ºÙ¿©¾ß Çϸç Ŭ·¡½ºÀÇ
¸â¹ö°¡ ¾Æ´Ï¹Ç·Î staticÀ̾î¾ß ÇÑ´Ù.
ÀμöÀÇ Å¸ÀÔÀº C# ½ºÅ¸ÀÏ·Î Àû´çÈ÷ Á¶Á¤ÇÑ´Ù. ¹®ÀÚ¿ Æ÷ÀÎÅÍ´Â string ŸÀÔÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖÀ¸¸ç unsigned´Â uint·Î ¹Ù²Û´Ù.
MB_OK³ª SW_SHOWNORMAL °°Àº ¸ÅÅ©·Î »ó¼ö´Â °ªÀ» Á÷Á¢ Á¶»çÇÏ¿© Á¤¼ö »ó¼ö¸¦
¾²´Â ¼ö¹Û¿¡ ¾ø´Ù.
µÎ ¾ð¾î¿¡ ´ëÇÑ °æÇèÀÌ ÀÖ´Ù¸é ´Ü¼ø ŸÀÔÀ» »ç¿ëÇÏ´Â ÇÔ¼ö´Â ¾î´À Á¤µµ º¯È¯ °¡´ÉÇÏÁö¸¸ ±¸Á¶Ã¼¸¦ Àμö·Î ¹Þ´Â ÇÔ¼ö´Â
È£ÃâÇϱ⠽±Áö ¾Ê´Ù. ±¸Á¶Ã¼¾È¿¡ Æ÷ÀÎÅͳª ¶Ç ´Ù¸¥ ±¸Á¶Ã¼°¡ ÀÖÀ¸¸é °ñÄ¡ ¾ÆÇÁ´Ù. ´å³ÝÀº »óÈ£ ¿î¿ë¼ºÀ» À§ÇØ ¿ÜºÎ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °ÍÀº Çã¿ëÇÏÁö¸¸ ±× ±â¼úÀº °áÄÚ °£´ÜÇÏÁö ¾Ê´Ù.
¿µ¾îÀÇ Property¿Í
Attribute¸¦ ¹ø¿ªÇÏ¸é µÑ ´Ù ¼Ó¼ºÀÌ¾î¼ µÎ °³³äÀÌ ¼·Î ±¸ºÐµÇÁö ¾Ê´Â´Ù. ±×·¡¼
¿µ¹® ¹ßÀ½´ë·Î Ç¥±âÇϴµ¥ ¿µ¾î·Î Çصµ °°Àº °³³äÀ» ĪÇϱâ´Â ¸¶Âù°¡ÁöÀÌ´Ù. °ø½Ä ¹®¼¿¡¼´Â ÇÁ·ÎÆÛƼ¸¦
¼Ó¼ºÀ¸·Î, ¾îÆ®¸®ºäÆ®´Â Ư¼ºÀ¸·Î ¹ø¿ªÇϴµ¥ »ç½Ç ±×°Ô ±×°Å´Ù. ¿ë¾îÀÇ
¿ø¹®µµ Àß ¾Ë¾ÆµÑ ÇÊ¿ä°¡ ÀÖ´Ù.
»ç¿ëÀÚ°¡ Á¤ÀÇÇÏ´Â Ä¿½ºÅÒ ¾îÆ®¸®ºäÆ®´Â ÄÄÆÄÀÏ ¹æ½ÄÀ̳ª Äڵ忡´Â ¿µÇâÀ» ÁÖÁö ¾ÊÀ¸¸ç ½ÇÇà ÆÄÀÏ¿¡ ¸ÞŸ µ¥ÀÌÅÍ·Î
Æ÷ÇԵȴÙ. ÀÏÁ¾ÀÇ ÁÖ¼®ÀÌµÇ ÀÏÁ¤ÇÑ Çü½ÄÀÌ ÀÖÀ¸¸ç ÇÁ·Î±×·¡¹Ö ¹æ½ÄÀ¸·Î Á¶ÀÛÇÒ ¼ö ÀÖ¾î ÀÚµ¿ÈµÈ 󸮰¡
°¡´ÉÇÏ´Ù. ÄÄÆÄÀÏ·¯´Â Çü½ÄÀÌ ¸Â´ÂÁö üũÇÏ¿© ±â·Ï¸¸ ÇØ ³õÀ» »Ó ¾îµð´Ù ½á ¸ÔÀ» °ÍÀÎÁö´Â »ç¿ëÀÚ ¸¶À½´ë·ÎÀÌ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¸Þ¼µå¿Í Çʵ忡 Á¦ÀÛÀÚ¿Í ÀÛ¼º ½Ã±â¸¦ ¾îÆ®¸®ºäÆ®·Î ±â·ÏÇÑ´Ù. ½ÇÇàÇØ
ºÁ¾ß º° Ãâ·ÂÀº ¾ø´Ù.
CustomAttribute |
using
System; [AttributeUsage(AttributeTargets.Method
| AttributeTargets.Field, AllowMultiple
= true, Inherited = false)] class
ProgrammerAttribute : Attribute { private
string Name; private
string Time; public
ProgrammerAttribute(string aName) { Name
= aName; Time
= "±â·Ï¾øÀ½"; } public
string When { get
{ return Time; } set
{ Time = value; } } } class CSTest
{ [Programmer("Kim")] static
public int Field1 = 0; [Programmer("Kim",
When = "2019³â 6¿ù 29ÀÏ")] static
public void Method1() { } [Programmer("Lee")] static
public void Method2() { } [Programmer("Park"),
Programmer("Choi")] static
public void Method3() { } static
void Main() { } } |
¾îÆ®¸®ºäÆ®µµ Ŭ·¡½ºÀε¥ ProgrammerAttribute¶ó´Â À̸§À¸·Î
Á¤ÀÇÇß´Ù. Ä¿½ºÅÒ ¾îÆ®¸®ºäÆ®´Â Attribute Ŭ·¡½º·ÎºÎÅÍ
»ó¼Ó¹ÞÀ¸¸ç ²¿¶ûÁö°¡ ~Attribute·Î ³¡³ª¸é ÁöÁ¤ÇÒ ¶§ Á¢¹Ì¸¦ »ý·«ÇÒ ¼ö ÀÖ¾î Æí¸®ÇÏ´Ù.
Programmer´Â Á¦ÀÛÀÚ À̸§À» ±â¾ïÇÏ´Â Name Çʵå¿Í ÀÛ¼º ½ÃÁ¡À» ±â·ÏÇÏ´Â Time Çʵ带 ¸â¹ö·Î ¼±¾ðÇÑ´Ù. »ý¼ºÀÚ´Â Á¦ÀÛÀÚ À̸§À» ¹Þ¾Æ Name Çʵ带 ÃʱâÈÇÏ°í TimeÀº "±â·Ï¾øÀ½"À¸·Î
ÃʱâÈÇÑ´Ù. TimeÀ» º¯°æÇÒ ¶§´Â When ÇÁ·ÎÆÛƼ¸¦ ÅëÇØ When = "¾ðÁ¦" ½ÄÀ¸·Î ´ëÀÔÇÑ´Ù.
Àû¿ëÇÒ ¶§´Â [ ] °ýÈ£ ¾È¿¡ ¾îÆ®¸®ºäÆ®¸¦ ¸í½ÃÇÏ°í () °ýÈ£ ¾È¿¡ Àμö¸¦ Àü´ÞÇÑ´Ù. Àμö´Â À̸§ ¿©ºÎ¿¡ µû¶ó µÎ °¡Áö
Á¾·ù·Î ±¸ºÐµÇ´Âµ¥ ÃʱâÈÇÏ´Â ¹æ¹ýÀÌ ´Ù¸£´Ù. À̸§¾ø´Â Àμö´Â »ý¼ºÀÚ¿¡¼ ½ÇÀμö°ªÀ» ¹Þ¾Æ ÃʱâÈÇϸç À̸§ÀÖ´Â
Àμö´Â Çʵ峪 ÇÁ·ÎÆÛƼ·Î Ç¥ÇöÇϹǷΠA = B½ÄÀ¸·Î ´ëÀÔÇÑ´Ù.
NameÀÌ À̸§¾ø´Â ÀμöÀ̸ç
WhenÀº À̸§ÀÖ´Â ÀμöÀÌ´Ù. À̸§¾ø´Â Àμö´Â ¹Ýµå½Ã ÁöÁ¤ÇØ¾ß ÇÏÁö¸¸ À̸§ÀÖ´Â Àμö´Â ÇÊ¿äÇÒ
¶§¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. À̸§¾ø´Â Àμö°¡ À̸§ÀÖ´Â Àμöº¸´Ù ¸ÕÀú ¿Í¾ß Çϸç À̸§ÀÖ´Â Àμö³¢¸®ÀÇ ¼ø¼´Â
Áß¿äÇÏÁö ¾Ê´Ù. ´ÙÀ½ µÎ ÁöÁ¤¹®ÀÇ È¿°ú´Â µ¿ÀÏÇÏ´Ù.
[SomeAttr("unnamed", A=1, B=2)]
[SomeAttr("unnamed", B=2, A=1)]
Àμö¿¡ ´ëÀԵǴ °ª¿¡´Â ¾Æ¹« ŸÀÔÀ̳ª ¾µ ¼ö ¾ø°í ¾à°£ÀÇ Á¦¾àÀÌ ÀÖ´Ù. ±âº»Çü°ú string, object, Type Ŭ·¡½º, ¿°ÅÇü, ±×¸®°í 1Â÷¿ø ¹è¿¸¸ °¡´ÉÇÏ´Ù.
2Â÷¿ø ¹è¿À̳ª Ŭ·¡½º ŸÀÔÀÇ °´Ã¼´Â ¾µ ¼ö ¾ø´Ù. ±×·¡¼ ½ÃÁ¡À» Ç¥ÇöÇÏ´Â TimeÀÌ DateTime °´Ã¼°¡ ¾Æ´Ï¶ó ´Ü¼øÇÑ stringÀÌ´Ù.
¾îÆ®¸®ºäÆ® ¼±¾ð¹®¿¡ ¶Ç ´Ù¸¥ ¾îÆ®¸®ºäÆ®ÀÎ AttributeUsage·Î
¿©·¯ °¡Áö ¼ºÁúÀ» ÁöÁ¤ÇÑ´Ù. »ý·«ÇÒ ¼ö ÀÖÁö¸¸ ´ë°³ÀÇ °æ¿ì´Â Àû¿ë ´ë»óÀ» ÁöÁ¤Çϱâ À§ÇØ ²À ÇÊ¿äÇÏ´Ù. ¾îÆ®¸®ºäÆ®¸¦ Á¤ÀÇÇϴµ¥ ¾îÆ®¸®ºäÆ®°¡ »ç¿ëµÇ´Â ¼ÀÀÌ´Ù.
AttributeUsage·Î ´ÙÀ½ ¼¼ °¡Áö ¼ºÁúÀ» ÁöÁ¤ÇÑ´Ù.
l ValidOn : À̸§¾ø´Â ÀμöÀ̸ç Àû¿ë °¡´ÉÇÑ ¿ä¼Ò¸¦ ÁöÁ¤ÇÑ´Ù. ÃʱâÈÇÒ
¶§ »ý¼ºÀÚ·Î µü ÇÑ ¹ø¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç ÀÌÈÄ ValidOn ÇÁ·ÎÆÛƼ·Î ÀÐÀ» ¼ö¸¸ ÀÖ´Ù. AttributeTargets ¿°ÅÇüÀ¸·Î Àû¿ë ´ë»óÀ» ÁöÁ¤ÇÏ¸ç µÎ °³ ÀÌ»óÀÇ ¿ä¼Ò´Â | ¿¬»êÀÚ·Î ¹´Â´Ù.
¿°Å°ª |
Àû¿ë ´ë»ó |
All |
¸ðµç ¿ä¼Ò |
Assembly |
¾î¼Àºí¸® |
Class |
Ŭ·¡½º |
Constructor |
»ý¼ºÀÚ |
Delegate |
µ¨¸®°ÔÀÌÆ® |
Enum |
¿°ÅÇü |
Event |
À̺¥Æ® |
Field |
Çʵå |
GenericPrarameter |
Á¦³×¸¯ Àμö |
Interface |
ÀÎÅÍÆäÀ̽º |
Method |
¸Þ¼µå |
Module |
¸ðµâ. ´Ü ºñÁÖ¾ó º£ÀÌÁ÷ ¸ðµâÀº Á¦¿Ü |
Parameter |
Çü½Ä Àμö |
Property |
ÇÁ·ÎÆÛƼ |
ReturnValue |
¸®ÅÏ°ª |
Struct |
±¸Á¶Ã¼ |
l AllowMultiple : À̸§ÀÖ´Â ÀμöÀ̸ç ÇÊ¿äÇÒ ¶§¸¸ ÁöÁ¤ÇÑ´Ù. ÇÑ
´ë»ó¿¡ ¿©·¯ ¹ø Àû¿ëÇÒ ¼ö ÀÖ´ÂÁö¸¦ ÁöÁ¤Çϴµ¥ µðÆúÆ®´Â false¿©¼ µü ÇÑ ¹ø¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. µ¿ÀÏÇÑ ¾îÆ®¸®ºäÆ®¸¦ ¿©·¯ ¹ø ÁöÁ¤ÇÏ´Â °ÍÀÌ Àǹ̰¡ ÀÖ´Ù¸é ÀÌ Àμö¸¦ true·Î
º¯°æÇÑ´Ù.
l Inherited : À̸§ÀÖ´Â ÀμöÀ̸ç ÇÊ¿äÇÒ ¶§¸¸ ÁöÁ¤ÇÑ´Ù. ÆÄ»ý
Ŭ·¡½º³ª ÀçÁ¤ÀǵǴ ¸Þ¼µå¿¡µµ Àû¿ëÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤Çϴµ¥ µðÆúÆ®´Â trueÀÌ´Ù. Ŭ·¡½º¿¡ ÀÌ ¾îÆ®¸®ºäÆ®¸¦ ÁöÁ¤Çϸé ÆÄ»ý Ŭ·¡½º¿¡µµ Àû¿ëµÈ´Ù.
Programmer ¾îÆ®¸®ºäÆ®´Â ¸Þ¼µå¿Í Çʵ忡 ´ëÇØ Àû¿ëÇϵµ·Ï ÃʱâÈÇß´Ù. µû¶ó¼ ÀÌ ¾îÆ®¸®ºäÆ®¸¦ Ŭ·¡½º³ª ÇÁ·ÎÆÛƼ¿¡ Àû¿ëÇÏ¸é ¿¡·¯ 󸮵ȴÙ. ÇÑ
¸Þ¼µå¸¦ ¿©·¯ ¸íÀÇ °³¹ßÀÚ°¡ °°ÀÌ ¸¸µé ¼öµµ ÀÖ¾î AllowMultipleÀº true·Î ÁöÁ¤ÇÏ¿© ¿©·¯ ¹ø Àû¿ëÇÒ ¼ö ÀÖµµ·Ï Çß´Ù. Inherited´Â false·Î ÁöÁ¤ÇÏ¿© »ó¼ÓÀº ÇÏÁö ¾Ê¾Ò´Ù.
CSTest¿¡¼ °¢ ¿ä¼Ò¿¡ ´ëÇØ
Programmer ¾îÆ®¸®ºäÆ®¸¦ ºÙ¿© ´©°¡ ¾ðÁ¦ ¸¸µç °ÍÀÎÁö ±â·ÏÇØ µÎ¾ú´Ù. Field1Àº KimÀÌ ¸¸µé¾úÀ¸¸ç Method1Àº
KimÀÌ 2019³â 6¿ù 29ÀÏ ¸¸µé¾ú´Ù. Method2´Â
Lee°¡ ¸¸µé¾ú°í Method3´Â Park, Choi°¡
°°ÀÌ ¸¸µé¾úÀ½À» ¾îÆ®¸®ºäÆ®·Î ±â·ÏÇØ µÎ¾ú´Ù. Áߺ¹ ÁöÁ¤ÇÒ ¶§ ¼ø¼´Â ¹«°üÇÏ¸ç ½°Ç¥·Î ²÷¾î ÁöÁ¤ÇÒ ¼öµµ
ÀÖ°í [ ] °ýÈ£¸¦ µû·Î ¾µ ¼öµµ ÀÖ´Ù. ´ÙÀ½ ÁöÁ¤¹®ÀÇ È¿°ú´Â
¸ðµÎ µ¿ÀÏÇÏ´Ù.
[Programmer("Park"),
Programmer("Choi")]
[Programmer("Choi"),
Programmer("Park")]
[Programmer("Park")]
[Programmer("Choi")]
¾îÆ®¸®ºäÆ®°¡ Àû¿ëµÇ´Â ´ë»óÀº ¹Ù·Î ´ÙÀ½¿¡ ÀÖ´Â ¿ä¼ÒÀ̸ç À§Ä¡ÀûÀ¸·Î °áÁ¤µÈ´Ù. ±×·¯³ª
ÀÌ·¸°Ô ÇÏ¸é ´Ù¼Ò ¾Ö¸ÅÇÑ °æ¿ìµµ Àִµ¥ À̶§´Â ¾îÆ®¸®ºäÆ® ÁöÁ¤¹®¿¡ Àû¿ë ´ë»óÀ» ºÐ¸íÈ÷ ¹àÇô¾ß ÇÑ´Ù. ´ÙÀ½
ÁöÁ¤¹®À» º¸ÀÚ.
[Some]
public static int Method1(string s) { return 0; }
Some ¾îÆ®¸®ºäÆ®¸¦ Method1¿¡
Àû¿ëÇß´Ù. ±×·±µ¥ ¸¸¾à ¸Þ¼µå Àüü°¡ ¾Æ´Ñ ¸®ÅÏ Å¸ÀÔ¿¡¸¸ Àû¿ëÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ÁöÁ¤¹®¾Õ¿¡ return:À» ºÙÀδÙ. ÀÌ·± ½ÄÀ¸·Î assembly:, module:, type:, method:, param: µîÀÇ Àû¿ë ´ë»ó ÁöÁ¤¹®ÀÌ ÀÖ´Â ¾îÆ®¸®ºäÆ®´Â
ÁöÁ¤ÇÑ ¿ä¼Ò¿¡¸¸ Àû¿ëµÈ´Ù.
[return:Some]
public static int Method2(string s) { return 0; }
Ä¿½ºÅÒ ¾îÆ®¸®ºäÆ®´Â Äڵ忡´Â ¾Æ¹«·± ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â´Ù. ±×·¯³ª
½ÇÇà ÆÄÀÏ¿¡ ¸ÞŸ µ¥ÀÌÅÍ·Î Æ÷ÇԵǹǷΠ¸®Ç÷º¼ÇÀ¸·Î ÀÌ Á¤º¸¸¦ °ü¸®ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î À§ ¿¹Á¦ÀÇ
°æ¿ì ¾î¶² ¸Þ¼µå¿¡¼ ¹ö±×°¡ ¹ß»ýÇß´Ù¸é ´©°¡ ¾ðÁ¦ Ãß°¡ÇÑ ¸Þ¼µåÀÎÁö ¾Ë¾Æ³¾ ¼ö ÀÖÀ¸¸ç ÇÁ·ÎÁ§Æ® °ü¸®¸¦ º°µµÀÇ ÇÁ·Î±×·¥À¸·Î ¸¸µé¾î ÀÚµ¿ÈÇÒ ¼ö ÀÖ´Ù.
°³¹ß¸¸ÅÀ̳ª ÇÁ·ÎÁ§Æ® °ü¸®µµ Áß¿äÇÏ´Ù. ¾îÆ®¸®ºäÆ®¸¦ Àß È°¿ëÇϸé ÇÁ·ÎÁ§Æ®
°ü¸®¿¡ ÇÊ¿äÇÑ ¸ðµç Á¤º¸¸¦ ÇÁ·ÎÁ§Æ® ÀÚü¿¡ ³»ÀåÇÒ ¼ö ÀÖ´Ù. ÀÛ¼ºÀÚ¿Í ½ÃÁ¡ ¿Ü¿¡µµ ¼öÁ¤ »çÇ×, ¿ì¼±¼øÀ§, ¹ö±× ¸ñ·Ï, ¸Þ¸ð
µîÀ» ±â·ÏÇØ ³õÀ¸¸é ¿©·¯ °¡Áö ¿ëµµ·Î È°¿ëÇÒ ¼ö ÀÖÀ¸¸ç ÇÁ·ÎÁ§Æ® °ü¸® ¾÷¹«°¡ ÀÚµ¿ÈµÈ´Ù.
Àü󸮹®Àº C¿¡¼ ºô·Á¿Â ¹®¹ýÀ̸ç ÄÄÆÄÀÏ°ú ¼Ò½º °ü¸® ¹æ½Ä¿¡ ¿µÇâÀ»
¹ÌÄ£´Ù. CÀÇ Àüó¸®(Preprocessing)´Â ¸í·É¿¡
µû¶ó ¼Ò½º¸¦ À籸¼ºÇÏ´Â °úÁ¤À» ÀǹÌÇϴµ¥ C#¿¡¼´Â ½ÇÁ¦·Î Àüó¸® °úÁ¤ÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸ç ÄÄÆÄÀÏ·¯°¡
ó¸®ÇÑ´Ù.
C#ÀÇ Àüó¸® ¸í·ÉÀº Á¾·ù¿Í Çü½ÄÀÌ
C¿Í °ÅÀÇ ºñ½ÁÇÏ°í µ¿ÀÛÀ̳ª ¿ëµµµµ °°´Ù. ´Ü,
#include´Â ¾ø´Âµ¥ C#Àº ¼±¾ð ¼ø¼°¡ ÀÇ¹Ì ¾ø°í Çì´õ ÆÄÀÏÀÇ °³³äÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. C#ÀÇ Àüó¸® ¸í·ÉÀ» °£´ÜÇÏ°Ô Á¤¸®ÇØ º¸ÀÚ.
¡á #define, #undef
½Éº¼À» Á¤ÀÇÇϰųª Ãë¼ÒÇÑ´Ù. #define SYMBOL ½ÄÀ¸·Î »ç¿ëÇϸç
Á¸À縦 Á¤ÀÇÇÒ »Ó °ªÀ» ´ëÀÔÇÏÁö´Â ¾Ê´Â´Ù. ÀÌ ½Éº¼Àº Á¶°ÇºÎ ÄÄÆÄÀÏ Áö½ÃÀÚ¿Í ÇÔ²² »ç¿ëÇÑ´Ù. ¹Ýµå½Ã ¼Ò½ºÀÇ ¼±µÎ¿¡ Àû¾î¾ß ÇÏ¸ç ½ÉÁö¾î using ¼±¾ðº¸´Ù ´õ
¾Õ¿¡ ÀÖ¾î¾ß ÇÑ´Ù. ÇÁ·ÎÁ§Æ® ¼Ó¼ºÃ¢¿¡¼µµ ½Éº¼À» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
¡á #if, #else, #elif, #endif
Á¶°ÇºÎ ÄÄÆÄÀÏ Áö½ÃÁöÀÌ´Ù. ½Éº¼ÀÇ Á¸Àç ¿©ºÎ¿¡ µû¶ó ƯÁ¤ ºÎºÐÀ» ÄÄÆÄÀÏÇϰųª
Á¦¿ÜÇÑ´Ù. ´ë»ó Äڵ带 #if¿Í #endif·Î °¨½Î¸é ÀÌ ºÎºÐÀÌ Á¶°ÇºÎ ÄÄÆÄÀϵȴÙ. ½Éº¼ÀÌ ¾ø´Â °æ¿ì¸¦
ó¸®ÇÏ°í ½Í´Ù¸é Áß°£¿¡ #else¸¦ ¾µ ¼öµµ ÀÖ°í ¶Ç ´Ù¸¥ Á¶°ÇÀ» ÁöÁ¤ÇÏ°í ½Í´Ù¸é #elif¸¦ ¾µ ¼öµµ ÀÖ´Ù.
ÀÌ µÎ Àü󸮹®À» »ç¿ëÇϸé Á¶°ÇºÎ ÄÄÆÄÀÏÀ» ÇÒ ¼ö ÀÖ´Ù. ¾Õ¿¡¼ Conditional ¾îÆ®¸®ºäÆ®·Î ¸¸µé¾ú´ø ¿¹Á¦¸¦ Àü󸮹®À¸·Î ´Ù½Ã ÀÛ¼ºÇØ º¸ÀÚ.
ifendif |
#define
TRIAL using
System; class CSTest
{ #if TRIAL static
void TrialMessage() { Console.WriteLine("ÀÌ
Á¦Ç°Àº 30ÀÏ°£¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù."); Console.WriteLine("Á¤Ç°À»
±¸ÀÔÇϽ÷Á¸é ¾î¼°í Àú¼°í.\n"); } #endif static
void Main() { #if TRIAL TrialMessage(); #endif Console.WriteLine("°ÔÀÓÀ»
½ÃÀÛÇÕ´Ï´Ù."); } } |
TRIAL ½Éº¼ÀÇ Á¸Àç ¿©ºÎ¿¡ µû¶ó
TrialMessage ¸Þ¼µå Á¤Àǹ®°ú È£Ãâ¹®À» Á¶°ÇºÎ·Î ÄÄÆÄÀÏÇß´Ù. Àü󸮹®Àº µé¿©¾²±â¸¦
ÇÏÁö ¾Ê±â ¶§¹®¿¡ ¼Ò½º ¸ð¾çÀÌ ³ÀâÇϸç È£Ãâ¹®±îÁö ÀÏÀÏÀÌ #if ~ #endif·Î °¨½Î¾ß ÇÑ´Ù. ±×·¡¼ C#Àº ´õ Æí¸®ÇÑ
Conditional ¾îÆ®¸®ºäÆ®¸¦ Á¦°øÇÑ´Ù.
±×·¯³ª ÀÌ ¹æ½ÄÀÌ ºÒÆíÇØ º¸¿©µµ ¾ÆÁ÷±îÁö ¾µ µ¥°¡ ¸¹À¸¸ç ¾îÆ®¸®ºäÆ®º¸´Ù À¶Å뼺ÀÌ ³ô´Ù. ¿ö³« ´Ü¼øÇÑ ¹æ½ÄÀ¸·Î µ¿ÀÛÇϱ⠶§¹®¿¡ ¸Þ¼µå »Ó¸¸ ¾Æ´Ï¶ó °³º° Äڵ带 Á¶°ÇºÎ ó¸®ÇÒ ¼ö ÀÖ°í Ŭ·¡½º³ª Çʵ忡
´ëÇؼµµ Àû¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ¸Þ¼µå ³»ÀÇ ÀϺΠÄڵ忡 ´ëÇÑ Á¶°ÇºÎ ÄÄÆÄÀÏÀº ¾îÆ®¸®ºäÆ®·Î´Â
ÇÒ ¼ö ¾ø´Ù.
static void TrialMessage() {
#if
TRIAL
Console.WriteLine("ÀÌ
Á¦Ç°Àº 30ÀÏ°£¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.");
Console.WriteLine("Á¤Ç°À»
±¸ÀÔÇϽ÷Á¸é ¾î¼°í Àú¼°í.\n");
#endif
}
¶ÇÇÑ &&, || °°Àº ³í¸® ¿¬»êÀÚ¸¦ ¾µ ¼ö ÀÖ¾î µÎ
°³ÀÇ Á¶°ÇÀ» Á¡°ËÇϱ⠽±´Ù. Conditional ¾îÆ®¸®ºäÆ®´Â ¿©·¯ °¡Áö Á¶°ÇÀ» Àû¿ëÇϱ⠺ÒÆíÇÏ¸ç °Ô´Ù°¡ #else¿¡ ÇØ´çÇÏ´Â ±â´ÉÀÌ ¾ø¾î ¼±ÅÃÀûÀ¸·Î Äڵ带 ÄÄÆÄÀÏÇÒ ¼ö ¾ø´Ù. ¶§·Î´Â
³í¸®ÀûÀ¸·Î µ¿ÀÛÇÏ´Â ½ÅÇüº¸´Ù ±â°èÀûÀ¸·Î µ¿ÀÛÇÏ´Â ±¸ÇüÀÌ ´õ Æí¸®ÇÑ °æ¿ìµµ ÀÖ´Ù.
¡á #warning, #error
µÚÂÊÀÇ ¹®ÀÚ¿À» °æ°í³ª ¿¡·¯·Î Ãâ·ÂÇÑ´Ù. °æ°í´Â Ãâ·Ââ¿¡ ¸Þ½ÃÁö¸¸
Ãâ·ÂÇÏ°í ÄÄÆÄÀÏÀº °è¼Ó µÇÁö¸¸ ¿¡·¯´Â ¸Þ½ÃÁö Ãâ·Â ÈÄ ÄÄÆÄÀÏÀ» Áï½Ã ÁßÁöÇÑ´Ù. ƯÁ¤ÇÑ Á¶°ÇÀÌ µÇÁö ¾ÊÀ»
¶§ À̸¦ °³¹ßÀÚ¿¡°Ô ¾Ë¸®°Å³ª Á¶°ÇÀÌ ¸¸Á·µÉ ¶§±îÁö ÄÄÆÄÀÏÀ» °ÅºÎÇÒ ¶§ ÀÌ Àü󸮹®À» »ç¿ëÇÑ´Ù. ¿¹¸¦
µé¾î ¶óÀ̺귯¸® ¹öÀüÀÌ ³Ê¹« ³·´Ù°Å³ª ¹®ÀÚ ÀÎÄÚµù ¹æ½ÄÀÌ ¸ÂÁö ¾ÊÀ» ¶§ ÄÄÆÄÀÏÇØ ºÁ¾ß µ¿ÀÛÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ºÐ¸íÈ÷ ¾Ë¸± ÇÊ¿ä°¡ ÀÖ´Ù.
¡á #region, #endregion
ÄÚµåÀÇ ºí·Ï¿¡ À̸§À» ÁÖ°í ÇϳªÀÇ ´ÜÀ§·Î Ç¥½ÃÇÑ´Ù. ÄÄÆÄÀÏ°ú´Â »ó°üÀÌ
¾øÀ¸¸ç ÆíÁý±â°¡ ÀÌ ºÎºÐÀ» Àá½Ã °¨Ãâ¼ö ÀÖµµ·Ï ¿µ¿ª ÁöÁ¤¸¸ ÇØ ³õ´Â´Ù. ÀÚÁÖ ÆíÁýÇÏÁö ¾Ê´Â Äڵ带 ÀÌ
¿µ¿ªÀ¸·Î °¨½Î ³õÀ¸¸é Ãà¼ÒÇØ ³õÀ» ¼ö ÀÖ´Ù. ´ÙÀ½ ±×¸²Àº ¾Õ¿¡¼ ¸¸µé¾ú´ø DllImport ¿¹Á¦ÀÇ ¿ÜºÎ DLL Á¤Àǹ®À» ¿µ¿ªÀ¸·Î °¨½Î ³õÀº
°ÍÀÌ´Ù.
¿ÜºÎ DLL Á¤Àǹ®Àº ÇÑ ¹ø¸¸ ¼±¾ðÇÏ¸é ´õ ÀÌ»ó ¼Õ µ¨ ÇÊ¿ä°¡ ¾ø´Ù. °Ô´Ù°¡ ¼±¾ð¹®ÀÌ ¿ö³« º¹ÀâÇØ º¸±â¸¸ Çصµ Á¤½Å »ç³ª¿îµ¥ ¿µ¿ªÀ¸·Î ÁöÁ¤ÇØ ³õÀ¸¸é Àüü°¡ ÇϳªÀÇ ´ÜÀ§°¡ µÇ¸ç ¿·¿¡ - ¹öÆ°ÀÌ ³ªÅ¸³´Ù. ÀÌ ¹öÆ°À» ´©¸£¸é ¿µ¿ªÀÌ Ãà¼ÒµÇ¾î ½Ã¿ø½º·¯¿ì¸ç
´«¿¡ °Å½½¸®Áö ¾Ê´Â´Ù.
Ãà¼ÒµÈ ¿µ¿ªÀº È帰 »öÀ¸·Î ¸®ÀüÀÇ À̸§¸¸ º¸À̴µ¥ ÆîÃÄ º¸°í ½ÍÀ» ¶§ ¾ðÁ¦µçÁö
+ ¹öÆ°À» ´©¸£¸é µÈ´Ù. ÀÌ Àü󸮹®Àº »ç¿ëÀÚ°¡ Á÷Á¢ ¾µ ¼öµµ ÀÖÁö¸¸ ÄÄÆÄÀÏ·¯°¡ ¼Ò½º °ü¸®
Â÷¿ø¿¡¼ ´õ ¸¹ÀÌ »ç¿ëÇÑ´Ù. º¸Åë »ç¿ëÀÚ°¡ Á÷Á¢ ÀÛ¼ºÇÏÁö ¾Ê´Â Äڵ带 ÀÌ·± ¿µ¿ª¿¡ ¹èÄ¡ÇÏ¿© ½Å°æ¾²Áö
¾Ê¾Æµµ µÇ°Ô²û ÇÑ´Ù.
¡á #line
ÆÄÀÏ À̸§°ú ÁÙ ¹øÈ£¸¦ º¯°æÇÑ´Ù. ÀÌ ¹øÈ£´Â °æ°í³ª ¿¡·¯¸¦ Ãâ·ÂÇÒ
¶§ À§Ä¡¸¦ °¡¸®Å²´Ù. ÀϹÝÀûÀÎ ¸ñÀûÀ¸·Î´Â »ç¿ëÇÏÁö ¾ÊÀ¸¸ç µð°Å±ëÀ̳ª ·Î±×¸¦ ³²±æ ¶§ °¡²û »ç¿ëÇÑ´Ù. #line default´Â ¿ø·¡ ÁÙ ¹øÈ£·Î µ¹¾Æ°£´Ù.
¸Þ¼µå´Â ¿©·¯ °÷¿¡¼ ¹Ýº¹ÀûÀ¸·Î È£ÃâÇÑ´Ù. Á¤»óÀûÀÎ Àμö°¡ Àü´ÞµÇ¸é
Àß µ¿ÀÛÇÏÁö¸¸ À߸øµÈ Àμö¸¦ ¹ÞÀ¸¸é ¿Àµ¿ÀÛÇÑ´Ù. ´ÙÀ½ ¸Å¼µå´Â ¿ùº° ¸ÅÃâÀ» Ãâ·ÂÇϴµ¥ À¯È¿ÇÑ °ªÀº 1 ~ 12±îÁöÀ̸ç 15³ª -8À»
Àü´ÞÇϸé Á¤»óÀûÀ¸·Î µ¿ÀÛÇÒ ¼ö ¾ø´Ù.
static void OutMonthSales(int month) {
Console.WriteLine($"{month}¿ù
¸ÅÃâ º¸°í¸¦ Ãâ·ÂÇÕ´Ï´Ù.");
}
Àμö°¡ À߸øµÇ¾úÀ» ¶§ ´©°¡ ³ª¿¡°Ô ÀÌ·± ¾û¶×ÇÑ Á¤º¸¸¦ Àü´ÞÇß´ÂÁö Á¶»çÇÏ¿© ¸Þ½ÃÁö³ª ·Î±×¿¡ ±â·ÏÇÏ°í ½Í´Ù°í ÇÏÀÚ. C´Â ÀÌ·± ¿ëµµ·Î __FILE__, __LINE__ ¸ÅÅ©·Î »ó¼ö¸¦
Á¦°øÇϸç Á» ±¸´Ú´Ù¸® °°¾Æ º¸¿©µµ µð¹ö±× ·Î±× ÀÛ¼º¿¡´Â ±²ÀåÈ÷ À¯¿ëÇÏ´Ù. ÇÏÁö¸¸ C#¿¡´Â ´ëÀÀµÇ´Â ±â´ÉÀÌ ¾ø¾î ¾Æ½¬¿ü´Ù.
C# 5.0¿¡¼ ¶È°°Àº ¿ëµµ·Î ¾µ ¼ö ÀÖ´Â ¾ÖÆ®¸®ºäÆ®¸¦ Ãß°¡Çß´Ù. È£ÃâÀÚ Á¤º¸¸¦ Á¶»çÇÏ°í ½ÍÀº ¸Þ¼µå´Â ´ÙÀ½ ¼¼ °³ÀÇ Àμö¸¦ ¹Þ°í ¾ÖÆ®¸®ºäÆ®¸¦ ºÙÀδÙ. ´Ù ¹ÞÀ» ÇÊ¿ä´Â ¾ø°í °ü½ÉÀÖ´Â Á¤º¸¸¸ ¹Þ¾Æµµ µÈ´Ù. ¿ø·¡ÀÇ ¸Þ¼µå¿Í
ȣȯÀ» À¯ÁöÇϱâ À§ÇØ ¼±ÅÃÀû Àμö·Î ¹Þ¾Æ¾ß ÇÑ´Ù.
Caller |
|
using
System; using
System.Runtime.CompilerServices; class CSTest
{ public
static void Main() { OutMonthSales(3); YearReport(); } static
void YearReport() { OutMonthSales(15); } static
void OutMonthSales(int month, [CallerMemberName]
string Caller = "", [CallerFilePath]
string Path = "", [CallerLineNumber]
int Line = 0 )
{ if
(month >= 1 && month <= 12) { Console.WriteLine($"{month}¿ù
¸ÅÃâ º¸°í¸¦ Ãâ·ÂÇÕ´Ï´Ù."); }
else { Console.WriteLine("À߸øµÈ
¿äûÀÔ´Ï´Ù."); Console.WriteLine($"{Path}ÀÇ {Caller}¸Þ¼µå{Line}ÁÙÀ» Á¡°ËÇϽʽÿÀ."); } } } |
|
½ÇÇà°á°ú |
3¿ù ¸ÅÃâ º¸°í¸¦
Ãâ·ÂÇÕ´Ï´Ù. À߸øµÈ ¿äûÀÔ´Ï´Ù. C:\DotNetStudy\CSTest\CSTest\Program.csÀÇ YearReport¸Þ¼µå11ÁÙÀ» Á¡°ËÇϽʽÿÀ. |
ÄÄÆÄÀÏ·¯´Â OutMonthSales¸¦ È£ÃâÇÒ ¶§¸¶´Ù ¼¼ Àμö¿¡ È£ÃâÀÚ
°ü·Ã Á¤º¸¸¦ Àü´ÞÇÑ´Ù. ´©°¡ ¾îµðÂë¿¡¼ ³ª¸¦ È£ÃâÇß´ÂÁö ¸Þ¼µå ³»ºÎ¿¡¼ Á¤È®È÷ ¾Ë ¼ö ÀÖ´Ù. ²À µð¹ö±ë ¸ñÀûÀÌ ¾Æ´Ï´õ¶óµµ ¿©·¯ °¡Áö ¿ëµµ·Î È°¿ëÇÒ ¼ö ÀÖ´Ù.