°íÀü ¾ð¾î´Â ¹®¹ýÀ» Á¤ÀÇÇÏ´Â ¾ð¾î¿Í ±â´ÉÀ» Á¤ÀÇÇÏ´Â ¶óÀ̺귯¸®°¡ ºÐ¸®µÇ¾î ÀÖ´Ù.
ÀÌ¿¡ ºñÇØ ´å³Ý, ÀÚ¹Ù °°Àº ÇÁ·¹ÀÓ¿öÅ©´Â ½ÇÇà ȯ°æÀ» Á¤ÀÇÇϱâ À§ÇØ ¾ð¾î¿Í ¶óÀ̺귯¸®°¡
±ä¹ÐÇÏ°Ô ¿¬°üµÇ¾î ÀÖ´Ù. ¶óÀ̺귯¸®°¡ ¾ð¾îÀÇ ±â´ÉÀ» Á¦°øÇϴµ¥ ±âº» ŸÀÔÀÎ Á¤¼ö(int)Çü Á¶Â÷µµ ¶óÀ̺귯¸®¿¡ Á¤ÀÇµÈ Å¬·¡½ºÀÌ´Ù.
±×·¡¼ ´å³ÝÀ» Àß È°¿ëÇÏ·Á¸é ´å³Ý Ŭ·¡½º ¶óÀ̺귯¸®(BCL)ÀÇ ±¸Á¶¸¦
Àß ÆľÇÇØ¾ß ÇÑ´Ù. BCLÀº Ŭ·¡½ºÀÇ ÁýÇÕÀ̸ç ÀÌ °èÃþÀÇ Á¦ÀÏ À§¿¡ ·çÆ® Ŭ·¡½ºÀÎ object°¡ ÀÖ´Ù. ¿ÀºêÁ§Æ®´Â °´Ã¼, Áï ¼¼»óÀÇ ¸ðµç °ÍÀ» ĪÇÑ´Ù. ´å³ÝÀÇ ¸ðµç Ŭ·¡½º´Â objectÀÇ ÈļÕÀÌ¸ç ±×·¡¼ object¸¦ ¼Ó¼ÓµéÀÌ ºÐ¼®ÇÒ ÇÊ¿ä°¡
ÀÖ´Ù.
´å³ÝÀÇ ·çÆ® Ŭ·¡½º´Â System.Object·Î Á¤ÀǵǾî ÀÖÀ¸¸ç C#Àº object¶ó´Â º°ÄªÀ» Á¦°øÇÑ´Ù. System.Object·Î ¾²´Â °ÍÀÌ ¿øÄ¢ÀÌÁö¸¸ using System ¼±¾ð¹®ÀÌ
ÀÖÀ¸¸é °£´ÜÈ÷ Object·Î ¾µ ¼öµµ ÀÖ´Ù. º°ÄªÀÎ object´Â °¡´ÉÇÏÁö¸¸ System.object´Â ¾ÈµÈ´Ù.
System.Object Obj; //
°¡Àå Á¤È®ÇÑ Ç¥Çö
Object Obj; //
³×ÀÓ½ºÆäÀ̽º »ý·«
object Obj; //
¾ð¾îÀÇ º°Äª »ç¿ë
System.object Obj; //
Ʋ¸° Ç¥Çö
C#Àº ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇϹǷÎ
Object¿Í object´Â ´Ù¸¥ Ç¥ÇöÀÌÁö¸¸ using ¼±¾ð¹®ÀÌ
ÀÖÀ» ¶§´Â °°´Ù. º°ÄªÀº ShiftÅ°¸¦ ¾È ´·¯µµ µÇ´Ï Æí¸®ÇÏ´Ù. ¹®ÀÚ¿À» Ç¥ÇöÇÏ´Â System.String°ú stringÀÇ °ü°èµµ µ¿ÀÏÇÏ´Ù. object´Â ÈļÕÀÇ ¸Þ¸ð¸® Àý¾àÀ»
À§ÇØ Çʵå´Â ¾øÀ¸¸ç °´Ã¼¸¦ °ü¸®ÇÏ´Â ¸Þ¼µå¸¸ °¡Áø´Ù.
¸Þ¼µå |
¼Ó¼º |
¼³¸í |
ToString |
public virtual |
°´Ã¼¸¦ ¹®ÀÚ¿ ÇüÅ·ΠǥÇöÇÑ´Ù. µðÆúÆ®·Î Ŭ·¡½º À̸§À» ¸®ÅÏÇϴµ¥ ÇÊ¿ä½Ã ÀçÁ¤ÀÇÇÒ
¼ö ÀÖ´Ù. |
GetType |
public |
°´Ã¼ÀÇ Å¸ÀÔ Á¤º¸¸¦ Á¦°øÇÏ´Â System.Type °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù. |
MemberwiseClone |
protected |
°´Ã¼ÀÇ ¸â¹ö³¢¸® ÀÏ´ëÀÏ º¹»çÇÑ´Ù. ¾èÀº º¹»çÀÌ´Ù. |
GetHashCode |
public virtual |
°´Ã¼¸¦ °Ë»öÇϱâ À§ÇÑ ÇؽðªÀ» ¸®ÅÏÇÑ´Ù. |
Equals |
public virtual public static |
µÎ °´Ã¼¸¦ ºñ±³ÇÏ¿© °°Àº °´Ã¼ÀÎÁö ÆǺ°ÇÑ´Ù. ³Î °´Ã¼¿Í ºñ±³ÇÒ ¼ö ÀÖ´Â Á¤Àû
¹öÀüµµ Áߺ¹ Á¤ÀǵǾî ÀÖ´Ù. |
ReferenceEquals |
public static |
°´Ã¼°¡ °°Àº ´ë»óÀ» °¡¸®Å°°í ÀÖ´ÂÁö ºñ±³ÇÑ´Ù. |
Finalize ¶Ç´Â ~Object(); |
protected virtual |
Á¤¸® ÀÛ¾÷À» ¼öÇàÇÏ´Â Æı«ÀÚÀÌ´Ù. Finalize À̸§À» ¾²´Â ´ë½Å Ŭ·¡½º¸í¾Õ¿¡ ~¸¦ ºÙÀδÙ. |
¼Ó¼º¿¡ virtualÀÌ Æ÷ÇÔµÈ °¡»ó ¸Þ¼µå´Â ÆÄ»ý Ŭ·¡½º¿¡¼ ÀçÁ¤ÀÇÇÒ
¼ö ÀÖÀ¸¸ç ÇÊ¿äÇÒ ¶§ ÀçÁ¤ÀÇÇ϶ó°í ¸¸µé¾î ³õÀº °ÍÀÌ´Ù. ƯÈ÷ °´Ã¼¸¦ ¹®ÀÚ¿·Î º¯È¯ÇÏ´Â ToString ¸Þ¼µå°¡ ÀÚÁÖ ÀçÁ¤ÀǵȴÙ. ´ÙÀ½ ¿¹Á¦´Â Time °´Ã¼¸¦ ¹®ÀÚ¿·Î º¯È¯ÇÑ´Ù.
TimeToString |
|
using
System; class Time { public
int hour, min, sec; public
Time(int h, int m, int s) { hour = h; min = m; sec = s; } public
void OutTime() { Console.WriteLine($"ÇöÀç
½Ã°£Àº {hour}½Ã {min}ºÐ {sec}ÃÊÀÌ´Ù."); } public
override string ToString() { return
hour + "½Ã " + min + "ºÐ " + sec + "ÃÊ"; } } class CSTest
{ static
void Main() { Time
Now = new Time(18, 25, 55); Now.OutTime(); Console.WriteLine(Now); } } |
|
½ÇÇà°á°ú |
ÇöÀç ½Ã°£Àº 18½Ã 25ºÐ 55ÃÊÀÌ´Ù. 18½Ã 25ºÐ 55ÃÊ |
WriteLine˼ Time˂
±¸Á¶¸¦ ¸ð¸£¸ç TimeÀ» Àμö·Î ¹ÞÁöµµ ¾Ê´Â´Ù. ÇÏÁö¸¸ TimeÀÌ ToString ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÏ¿© ½º½º·ÎÀÇ Á¤º¸¸¦ ¹®ÀÚ¿·Î
º¯È¯Çϸé WriteLineÀ¸·Î Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. WriteLineÀº object ŸÀÔÀÇ Àμö¸¦ ¹Þ¾Æ ToStringÀ» È£ÃâÇÏ¿© ¹®ÀÚ¿·Î
º¯È¯ÇÏ¿© Ãâ·ÂÇÑ´Ù.
ToString ¸Þ¼µå´Â
object ¼Ò¼ÓÀÌ¾î¼ ¸ðµç Ŭ·¡½º¿¡ Ç×»ó Á¸ÀçÇϸç Ŭ·¡½ºÀÇ À̸§À» Ãâ·ÂÇÑ´Ù. À§ ¿¹Á¦ÀÇ ToStringÀ» Á¦°ÅÇصµ Àß ÄÄÆÄÀϵÇÁö¸¸ º¸¿©ÁÖ´Â Á¤º¸°¡ ½Ç¿ëÀûÀÌÁö ¸øÇÏ´Ù.
°´Ã¼ÀÇ ½ÇÁ¦ ³»¿ëÀ» »ó¼¼ÇÏ°Ô Ãâ·ÂÇÏ°í ½ÍÀ» ¶§ ToStringÀ» ÀçÁ¤ÀÇÇÑ´Ù. °´Ã¼ ½º½º·Î ÀÚ½ÅÀÇ Á¤º¸¸¦ ¹®ÀÚ¿·Î Ç¥ÇöÇÏ¸é ·Î±×¸¦ ³²±â°Å³ª µð¹ö±ëÇÒ ¶§ À¯¿ëÇÏ´Ù.
object¿¡´Â °´Ã¼ÀÇ µ¿ÀϼºÀ» ºñ±³ÇÏ´Â ¼¼ °³ÀÇ ¸Þ¼µå°¡ ÀÖ´Ù. ´å³Ý ¶óÀ̺귯¸®´Â °´Ã¼ ºñ±³°¡ ÇÊ¿äÇÒ ¶§ ÀÌ ¸Þ¼µå¸¦ »ç¿ëÇÑ´Ù. ÀÌ
Áß Equals ¸Þ¼µå´Â ÀçÁ¤ÀÇ °¡´ÉÇÏ¿© Ŭ·¡½º¿¡ µû¶ó °íÀ¯ÇÑ ºñ±³ ¹æ¹ýÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
public virtual bool Equals (Object obj)
°¡»ó ¸Þ¼µåÀ̸ç A.Equals(B) Çü½ÄÀ¸·Î »ç¿ëÇÑ´Ù. µðÆúÆ® ±¸ÇöÀº ÂüÁ¶°¡ °°ÀºÁö, Áï µÎ °´Ã¼°¡ °¡¸®Å°´Â ¹øÁö°¡ °°ÀºÁö
ºñ±³ÇÑ´Ù. ÆÄ»ý Ŭ·¡½º¿¡¼ ÂüÁ¶°¡ ¾Æ´Ñ ½ÇÁ¦ Ŭ·¡½ºÀÇ ³»¿ëÀ» ºñ±³ÇÏ°í ½Í´Ù¸é ÀÌ ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇÑ´Ù.
public static bool Equals (Object objA,Object
objB)
Á¤Àû ¸Þ¼µåÀ̸ç object.Equals(A, B) Çü½ÄÀ¸·Î »ç¿ëÇÑ´Ù. ºñÁ¤Àû ¸Þ¼µå´Â A.Equals(null)Àº °¡´ÉÇÏÁö¸¸ null.Equals(B)´Â ¾ÈµÈ´Ù. ±×·¡¼ object.Equals(null, B) ½ÄÀ¸·Î È£ÃâÇÏ´Â Á¤Àû ¸Þ¼µå°¡ ÇÊ¿äÇÏ´Ù. µÑ ´Ù nullÀ̸é true¸¦
¸®ÅÏÇÏ°í µÑ Áß Çϳª¸¸ nullÀ̸é false¸¦ ¸®ÅÏÇÑ´Ù. µÑ ´Ù nullÀÌ ¾Æ´Ï¸é °¡»ó
Equals¸¦ È£ÃâÇÑ´Ù.
public static bool ReferenceEquals (Object
objA,Object objB)
Á¤Àû Equals¿Í ¸¶Âù°¡Áö·Î ÂüÁ¶ ´ë»óÀ» ºñ±³ÇÑ´Ù. Á¤Àû Equals¿Í ±âº» µ¿ÀÛÀº °°Áö¸¸ ÀçÁ¤ÀÇÇÒ ¼ö ¾ø¾î Ç×»ó ÂüÁ¶·Î
ºñ±³ÇÑ´Ù.
Á¤Àû Equals´Â ºñ±³ °´Ã¼ Áß Çϳª°¡ nullÀÎ °æ¿ì¸¦ À§ÇØ Á¸ÀçÇϹǷΠ½ÇÁ¦·Î´Â µÎ °³ÀÇ ºñ±³ ¸Þ¼µå°¡ ÀÖ´Â ¼ÀÀÌ´Ù.
ÀÌ µÑÀº ÀçÁ¤ÀÇ °¡´É¼ºÀÌ ´Ù¸£´Ù. ´ÙÀ½ ¿¹Á¦´Â Time Ŭ·¡½ºÀÇ
°´Ã¼¸¦ µÎ ¸Þ¼µå·Î ºñ±³ÇÑ´Ù.
TimeEquals |
|
using
System; class Time { public
int hour, min, sec; public
Time(int h, int m, int s) { hour = h; min = m; sec = s; } public
override bool Equals(object obj) { Time
Other = (Time)obj; return
(Other.hour == hour && Other.min == min && Other.sec == sec); } } class CSTest
{ static
void Main() { Time
A = new Time(1, 2, 3); Time
B = new Time(1, 2, 3); Time
C = A; Console.WriteLine("Equals(A,
B) = " + Equals(A, B)); Console.WriteLine("Equals(A,
C) = " + Equals(A, C)); Console.WriteLine("ReferenceEquals(A,
B) = " + ReferenceEquals(A, B)); Console.WriteLine("ReferenceEquals(A,
C) = " + ReferenceEquals(A, C)); } } |
|
½ÇÇà°á°ú |
Equals(A, B)
= True Equals(A, C)
= True ReferenceEquals(A,
B) = False ReferenceEquals(A,
C) = True |
object·ÎºÎÅÍ »ó¼Ó¹ÞÀº °¡»ó
Equals¸¦ ÀçÁ¤ÀÇÇÏ¿© °´Ã¼ÀÇ ³»¿ëÀ» ºñ±³ÇÑ´Ù. ½ÃºÐÃÊ Çʵ尡 ¸ðµÎ ÀÏÄ¡ÇÏ¸é °°°í ¼Â
Áß Çϳª¶óµµ ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ´Ù¸¥ °ÍÀÌ´Ù. A¿Í B¸¦ ¶È°°Àº
½Ã°£À¸·Î ÃʱâÈÇÏ°í C¿¡ A¸¦ ´ëÀÔÇÏ¿© °°Àº ´ë»óÀ» ÂüÁ¶Çϵµ·Ï
ÇØ ³õ°í °¢ °´Ã¼¸¦ ºñ±³Çß´Ù.
°´Ã¼ÀÇ ½ÇÁ¦ ³»¿ëÀ» ºñ±³Çϵµ·Ï Equals¸¦ ÀçÁ¤ÀÇÇßÀ¸¹Ç·Î A, C »Ó¸¸ ¾Æ´Ï¶ó A, Bµµ °°Àº °ÍÀ¸·Î ÆÇ´ÜÇÑ´Ù. ÇÏÁö¸¸ ReferenceEquals´Â A, C´Â °°´Ù°í Æò°¡ÇÏÁö¸¸ A, B´Â Èü»óÀÇ À§Ä¡°¡ ÀÏÄ¡ÇÏÁö ¾Ê¾Æ
´Ù¸£´Ù°í Æò°¡ÇÑ´Ù. Equals ¸Þ¼µå ÀçÁ¤Àǹ®À» »èÁ¦ÇØ ¹ö¸®¸é
Equals(A, B)µµ false¸¦ ¸®ÅÏÇÑ´Ù.
== ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÏ¿© ³»¿ëÀ» ºñ±³ÇÒ ¼öµµ ÀÖ´Ù. == ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇϸé Equals ¸Þ¼µåµµ °°ÀÌ ÀçÁ¤ÀÇÇؾß
ÇÏ¸ç ±×·¸Áö ¾ÊÀ¸¸é ºñ±³ÀÇ ÀÏ°ü¼ºÀÌ ÈÑ¼ÕµÇ¾î °æ°í°¡ ¹ß»ýÇÑ´Ù. Equals¿Í == ¿¬»êÀÚ´Â Ç×»ó ½ÖÀ¸·Î ÀçÁ¤ÀÇÇØ¾ß ÇÏ¸ç ¶Ç ==À» ÀçÁ¤ÀÇÇϸé !=µµ °°ÀÌ ÀçÁ¤ÀÇÇØ¾ß ÇÑ´Ù. Time Ŭ·¡½º°¡ ¿Ïº®ÇØÁö·Á¸é ´ÙÀ½
µÎ ¿¬»êÀÚ°¡ ´õ ÇÊ¿äÇÏ´Ù.
public static bool operator ==(Time A, Time B) {
return
(A.hour == B.hour && A.min == B.min && A.sec == B.sec);
}
public static bool operator !=(Time A, Time B) {
return
!(A == B);
}
°´Ã¼¸¦ ¸Ê¿¡ ÀúÀåÇÒ ¶§ ÀúÀå À§Ä¡¸¦ ã´Â GetHashCode ¸Þ¼µåµµ
ÀçÁ¤ÀÇÇ϶ó´Â °æ°í°¡ ¹ß»ýÇÑ´Ù. ºñ±³ ¹æ¹ýÀÌ ¹Ù²î¸é Çؽà Äڵ尡 ¿µÇâÀ» ¹Þ±â ¶§¹®ÀÌ´Ù. ¸Ê¿¡ ÀúÀåÇÒ °èȹÀÌ ¾ø´Ù¸é ¹«½ÃÇصµ »ó°ü¾ø´Âµ¥ ÀÚ¼¼ÇÑ °ÍÀº ¸Ê¿¡¼ ¿¬±¸ÇØ º¸ÀÚ.
== ¿¬»êÀÚ°¡ ´õ ª°í ½¬¿îµ¥
object´Â ¿Ö ±»ÀÌ ºñ±³ ¸Þ¼µå¸¦ Á¦°øÇÏ´Â °ÍÀϱî? »ç½Ç ==¸¸ ¿À¹ö·ÎµùÇصµ ¿øÇϴ´ë·Î ºñ±³ÇÒ ¼ö ÀÖ¾î ºñ±³ ¸Þ¼µå°¡ ±»ÀÌ ÇÊ¿äÄ¡ ¾Ê´Ù.
¾Æ¹«·¡µµ Equals(A, B) º¸´Ù A == B°¡
´õ º¸±â ÁÁ´Ù. C#¸¸ ¾´´Ù¸é Equals´Â ÀüÇô ÇÊ¿äÄ¡
¾Ê´Ù.
ºñ±³ ¹æ¹ýÀÌ Áߺ¹ Á¦°øµÇ´Â ÀÌÀ¯´Â ´å³Ý °øÅë ¾ð¾î ±Ô¾à(CLS)¿¡
¿¬»êÀÚ ¿À¹ö·ÎµùÀÌ Àǹ« »çÇ×ÀÌ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. ºñÁÖ¾ó º£ÀÌÁ÷ÀÌ ==
¿¬»êÀÚ¸¦ È°¿ëÇÏÁö ¸øÇÏ´Ï ·çÆ®°¡ ¾î¿ ¼ö ¾øÀÌ ÀçÁ¤ÀÇ °¡´ÉÇÑ ¸Þ¼µå¸¦ Á¦°øÇÏ´Â ¼ö¹Û¿¡ ¾ø´Ù. ´å³ÝÀÇ
¾ð¾î µ¶¸³¼º È®º¸¸¦ À§ÇÑ ºñ¿ëÀÎ ¼ÀÀÌ´Ù.
¸®Ç÷º¼Ç(Reflection)Àº ½ÇÇàÁß¿¡ Ŭ·¡½º³ª °´Ã¼ÀÇ Å¸ÀÔ Á¤º¸¸¦
Á¶»çÇÏ´Â ±â´ÉÀÌ´Ù. ŸÀÔ Á¤º¸´Â ÄÄÆÄÀÏÁß¿¡¸¸ »ç¿ëµÇ¸ç ±â°è¾î·Î ¹Ù²î¸é »ç¶óÁö´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. ±×·¯³ª C#Àº ŸÀÔ¿¡ ´ëÇÑ ¸ÞŸ µ¥ÀÌÅ͸¦ ½ÇÇà ÆÄÀÏ¿¡ ±â·ÏÇØ ³õÀ¸¸ç
ÀÌ Á¤º¸¸¦ ÅëÇØ ´Ù¸¥ ¸ðµâÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÒ ¼ö ÀÖ°í ¸Þ¼µå¸¦ È£ÃâÇÒ ¼öµµ ÀÖ´Ù.
ŸÀÔ Á¤º¸´Â Type Ŭ·¡½º·Î Ç¥ÇöÇÑ´Ù. Ŭ·¡½ºÀÇ Á¤º¸¸¦ Ç¥ÇöÇÏ´Â °Íµµ Ŭ·¡½ºÀÌ´Ù. TypeÀº Ãß»ó Ŭ·¡½ºÀ̸ç
ŸÀÔÀ» Ç¥ÇöÇÏ´Â ´ëÇ¥ Ŭ·¡½º ¿ªÇÒ¸¸ ÇÏ°í ½ÇÁ¦ Á¤º¸´Â Type ÆÄ»ý Ŭ·¡½º°¡ °¡Áø´Ù. ŸÀÔ Á¤º¸ ¸ðµÎ Àбâ Àü¿ëÀÌ¾î¼ Á¶»ç¸¸ ÇÒ ¼ö ÀÖ°í º¯°æÇÒ ¼ö´Â ¾ø´Ù.
Type °´Ã¼´Â ´ÙÀ½ ¼¼ °¡Áö ¹æ¹ýÀ¸·Î ¾ò´Â´Ù.
l objectÀÇ GetType ¸Þ¼µå¸¦ È£ÃâÇÑ´Ù. Time ÇüÀÇ Now °´Ã¼°¡ ÀÖÀ» ¶§ Now.GetType()À» È£ÃâÇϸé Type °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù.
l TypeÀÇ Á¤Àû ¸Þ¼µåÀÎ GetTypeÀ» »ç¿ëÇÑ´Ù. °´Ã¼°¡ ¾Æ´Ñ ¹®ÀÚ¿ Çü½ÄÀÇ Å¸ÀÔ À̸§À» Àμö·Î Àü´ÞÇÏ¸ç ´ë¼Ò¹®ÀÚ ±¸ºÐ ¿©ºÎ¿Í ŸÀÔÀÌ ¹ß°ßµÇÁö ¾ÊÀ» ¶§ ¿¹¿Ü
ó¸® ¿©ºÎ¸¦ Ãß°¡·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. À̸§¸¸ Àü´ÞÇÏ¸é ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏ¸ç ¿¹¿Ü´Â ´øÁöÁö ¾Ê´Â´Ù. Time Ŭ·¡½ºÀÇ Á¤º¸¸¦ ÀÐ°í ½Í´Ù¸é
Type.GetType("Time")À» È£ÃâÇÑ´Ù.
l typeof ¿¬»êÀÚ¸¦ »ç¿ëÇϸç Àμö·Î Ŭ·¡½º¸íÀ» Àü´ÞÇÑ´Ù. Time Ŭ·¡½ºÀÇ
°æ¿ì typeof(Time)À¸·Î Type °´Ã¼¸¦ ¾ò´Â´Ù. ¾ð¾î°¡ Á¦°øÇÏ´Â ¿¬»êÀÚ¿©¼ °¡Àå °£´ÜÇÏ´Ù.
¸®ÅϵǴ °´Ã¼´Â TypeÀÇ ÆÄ»ý ŸÀÔÀ̹ǷΠType ÇüÀÇ °´Ã¼·Î ¹ÞÀ¸¸é µÈ´Ù. ŸÀÔ¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÏ´Â ÇÁ·ÎÆÛƼ¿Í
¸Þ¼µå°¡ Á¦°øµÈ´Ù. ¸ÕÀú ÇÁ·ÎÆÛƼ ¸ñ·ÏºÎÅÍ º¸µÇ ÀÚÁÖ »ç¿ëÇÏ´Â ¸î °¡Áö¸¸ Á¤¸®Çß´Ù. ¿ÏÀüÇÑ ¸ñ·ÏÀº ·¹ÆÛ·±½º¸¦ Âü°íÇϱ⠹ٶõ´Ù.
ÇÁ·ÎÆÛƼ |
ŸÀÔ |
¼³¸í |
Name |
string ¨Þ |
ŸÀÔÀÇ À̸§ |
NameSpace |
string ¨Þ |
Æ÷ÇÔµÈ ³×ÀÓ½ºÆäÀ̽ºÀÇ À̸§ |
FullName |
string ¨Þ |
³×ÀÓ½ºÆäÀ̽º¸¦ Æ÷ÇÔÇÑ À̸§ |
BaseType |
Type ¨Þ |
ºÎ¸ð Ŭ·¡½ºÀÇ Å¸ÀÔ |
UnderlyingSystemType |
Type ¨Þ |
CLRÀÌ Á¦°øÇÏ´Â ³»ºÎ ½Ã½ºÅÛ Å¸ÀÔÀÇ À̸§ |
IsAbstract |
bool ¨Þ |
Ãß»ó Ŭ·¡½º ¿©ºÎ |
IsArray |
bool ¨Þ |
¹è¿ ¿©ºÎ |
IsEnum |
bool ¨Þ |
¿°ÅÇü ¿©ºÎ |
IsNested |
bool ¨Þ |
Æ÷ÇÔµÈ ³»ºÎ ŸÀÔÀÎÁö¸¦ Á¶»çÇÑ´Ù. |
IsGeneric |
bool ¨Þ |
Á¦³×¸¯ ŸÀÔÀÎÁö Á¶»çÇÑ´Ù. |
IsInterface |
bool ¨Þ |
ÀÎÅÍÆäÀ̽º ¿©ºÎ |
IsPrimitive |
bool ¨Þ |
±âº» ŸÀÔ Áß ÇϳªÀÎÁö¸¦ Á¶»çÇÑ´Ù. |
IsSealed |
bool ¨Þ |
ºÀÀÎ ¿©ºÎ |
IsValueType |
bool ¨Þ |
°ª ŸÀÔ ¿©ºÎ |
ŸÀÔÀÇ À̸§°ú ¼Ò¼ÓµÈ ³×ÀÓ½ºÆäÀ̽º´Â ¹°·ÐÀÌ°í ºÎ¸ð Ŭ·¡½º¿Í ³»ºÎ ŸÀÔÀÇ À̸§±îÁö Á¶»çÇÒ ¼ö ÀÖ´Ù. Is·Î ½ÃÀ۵Ǵ ÇÁ·ÎÆÛƼ´Â ŸÀÔÀÌ Æ¯Á¤ ¼Ó¼ºÀ» °¡Áö´ÂÁö Á¶»çÇÑ´Ù. ¸Þ¼µåµµ
¼ö½Ê°³³ª Á¤ÀǵǾî Àִµ¥ ÀÌ ¸Þ¼µå¸¦ »ç¿ëÇÏ¸é ¾î¶² ¸â¹ö°¡ ÀÖ´ÂÁö »ó¼¼ÇÏ°Ô Á¶»çÇÒ ¼ö ÀÖ´Ù. ´ëÇ¥ÀûÀ¸·Î GetFields ¸Þ¼µå¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.
public FieldInfo[] GetFields ()
°³º° Çʵ忡 ´ëÇÑ Á¤º¸´Â FieldInfo Ŭ·¡½º·Î Ç¥ÇöÇϸç FieldInfoÀÇ ¹è¿·Î ¸ðµç ÇʵåÀÇ Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù. FieldInfo´Â
¶Ç ´Ù¸¥ Ŭ·¡½ºÀε¥ ÇʵåÀÇ Á¤º¸¸¦ Á¶»çÇÏ´Â ÇÁ·ÎÆÛƼ¿Í ¸Þ¼µå°¡ ¸â¹ö·Î Æ÷ÇԵǾî ÀÖ´Ù. NameÀº ÇʵåÀÇ
À̸§ÀÌ°í IsPublic, IsPrivate, IsStaticÀº ÇʵåÀÇ ÁöÁ¤ÀÚ¸¦ Á¶»çÇÑ´Ù.
FieldType ÇÁ·ÎÆÛƼ´Â ÇʵåÀÇ Å¸ÀÔ¿¡ ´ëÇÑ ¶Ç ´Ù¸¥ Type °´Ã¼ÀÌ´Ù. Ŭ·¡½ºÀÇ Å¸ÀÔ Á¤º¸·ÎºÎÅÍ ÇÊµå ¸ñ·ÏÀ» ±¸Çߴµ¥
ÇʵåÀÇ Å¸ÀÔÀÌ ¶Ç ´Ù¸¥ ŸÀÔ Á¤º¸¿©¼ Àç±ÍÀûÀÌ´Ù. ±×·¡¼ ŸÀÔÀ» Á¶»çÇÏ´Â °úÁ¤Àº ¿©·¯ ´Ü°è·Î ÁßøµÈ´Ù. °³º° Çʵ带 Á¶»çÇÒ ¶§´Â ´ÙÀ½ ¸Þ¼µå¸¦ È£ÃâÇÑ´Ù.
public abstract FieldInfo GetField (string
name,BindingFlags bindingAttr)
ù ¹ø° Àμö´Â ÇʵåÀÇ À̸§ÀÌ¸ç µÎ ¹ø° Àμö´Â ´ë¼Ò¹®ÀÚ ±¸ºÐ ¿©ºÎ, °Ë»ö
´ë»ó ÁöÁ¤ÀÚÀÌ´Ù. GetEvent(s), GetProperty(ies), GetInterface(s),
GetConstructor(s), GetMember(s) µîÀÇ ¸Þ¼µåµµ ŸÀÔ¸¸ ´Ù¸¦ »Ó
GetField(s)¿Í »ç¿ë ¹æ¹ýÀº °°´Ù.
ŸÀÔ Á¤º¸·ÎºÎÅÍ ¸ðµç ¸â¹öÀÇ Á¤º¸¸¦ ½Ã½ÃÄÝÄÝÇÏ°Ô Á¶»çÇÒ ¼ö ÀÖ¾î Ŭ·¡½º ¼±¾ð¹®À» º¹¿øÇس¾ ¼ö ÀÖÀ» Á¤µµ´Ù. ´ÙÀ½ ¿¹Á¦´Â Time Ŭ·¡½ºÀÇ Á¤º¸¸¦ Á¶»çÇÏ¿© Ãâ·ÂÇÑ´Ù. Time Ŭ·¡½º´Â Áö±Ý±îÁö ÁÙ°ð »ç¿ëÇØ¿ÔÀ¸¹Ç·Î ´Ã»ó ºÁ¿À´ø ±×´ë·ÎÀÌµÇ ³×ÀÓ½ºÆäÀ̽º ¾È¿¡ ¼±¾ðÇß´Ù.
TimeInfo |
½ÇÇà°á°ú |
using System; using System.Reflection; namespace MySpace { class
Time { public
int hour, min, sec; public
Time(int h, int m, int s) { hour = h; min = m; sec = s; } public
void OuTimeTypeime() { Console.WriteLine($"ÇöÀç ½Ã°£Àº {hour}½Ã {min}ºÐ {sec}ÃÊÀÌ´Ù."); } } } class CSTest { static
void Main() { MySpace.Time
Now = new MySpace.Time(1, 2, 3); Type
TimeType = Now.GetType(); //Type
TimeType = Type.GetType("MySpace.Time"); //Type
TimeType = typeof(MySpace.Time); Console.WriteLine(TimeType.Name); Console.WriteLine(TimeType.FullName); Console.WriteLine(TimeType.Namespace); Console.WriteLine(TimeType.BaseType.Name); Console.WriteLine(TimeType.UnderlyingSystemType.Name); if
(TimeType.IsValueType) { Console.WriteLine("°ª ŸÀÔÀÔ´Ï´Ù."); } FieldInfo[]
TimeField = TimeType.GetFields(); for
(int i = 0; i < TimeField.Length; i++) { Console.WriteLine($"{i}¹ø° Çʵå =
{TimeField[i].Name}"); } MethodInfo[]
TimeMethod = TimeType.GetMethods(); for
(int i = 0; i < TimeMethod.Length; i++) { Console.WriteLine($"{i}¹ø° ¸Þ¼µå =
{TimeMethod[i].Name}"); } } } |
Time MySpace.Time MySpace Object Time 0¹ø° Çʵå = hour 1¹ø° Çʵå = min 2¹ø° Çʵå = sec 0¹ø° ¸Þ¼µå = OuTimeTypeime 1¹ø° ¸Þ¼µå = GetType 2¹ø° ¸Þ¼µå = ToString 3¹ø° ¸Þ¼µå = Equals 4¹ø° ¸Þ¼µå = GetHashCode |
¸®Ç÷º¼Ç °ü·Ã Ŭ·¡½º°¡ ¼±¾ðµÈ System.Reflection¿¡ ´ëÇØ using ¼±¾ðÀ» ÇØ¾ß ÇÑ´Ù. Time °´Ã¼ Now¸¦ »ý¼ºÇÏ°í NowÀÇ
GetType ¸Þ¼µå¸¦ È£ÃâÇÏ¿© Type °´Ã¼
TimeTypeÀ» Á¶»çÇß´Ù. ¾Æ·¡ÂÊÀÇ ÁÖ¼® ó¸®µÈ µÎ Ç൵ ¶È°°Àº µ¿ÀÛÀ» Çϴµ¥ À̸§À»
Àü´ÞÇÒ ¶§´Â ¼Ò¼Ó ³×ÀÓ½ºÆäÀ̽ºµµ °°ÀÌ ¹àÈù´Ù. Á¶»çµÈ TimeTypeÀ¸·Î
Ŭ·¡½º ÀÚü¿Í Çʵå, ¸Þ¼µåÀÇ Á¤º¸¸¦ Á¶»çÇØ Ãâ·ÂÇß´Ù.
ÇÁ·ÎÆÛƼ¸¦ Àоî À̸§, ³×ÀÓ½ºÆäÀ̽º,
ºÎ¸ð Ŭ·¡½º µîÀ» Á¶»çÇÏ°í GetFields¿Í
GetMethods ¸Þ¼µå¸¦ È£ÃâÇÏ¿© Çʵå¿Í ¸Þ¼µåÀÇ ¸ñ·ÏÀ» Á¶»çÇß´Ù. »ó¼Ó¹ÞÀº ¸â¹öµµ
¸ðµÎ Á¶»çµÈ´Ù. Time Ŭ·¡½º´Â ±¸Á¶°¡ °£´ÜÇØ ÀÌ Á¤µµÁö¸¸ ³»ºÎ ŸÀÔÀ» ÁßøÇϰųª Æ÷ÇÔµÈ °´Ã¼°¡ ÀÖ´Ù¸é
ÈξÀ º¹ÀâÇÏ´Ù.
¸®Ç÷º¼ÇÀº ½Ã½ºÅÛÀÌ »ç¿ëÇÏ´Â °ÍÀÌ¾î¼ ¼¼ºÎÀûÀÎ »çÇ×±îÁö »ó¼¼ÇÏ°Ô ¿¬±¸ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¹°·Ð °¡²ûÀº ¸®Ç÷º¼ÇÀ» Á÷Á¢ ÇØ¾ß ÇÒ °æ¿ìµµ Àִµ¥ ÇÊ¿äÇÒ ¶§ ¿¬±¸ÇØ º¸¾Æ¶ó.
°ü·Ã Ŭ·¡½º°¡ ¿ö³« ¸¹°í ¹æ´ëÇØ ·¹ÆÛ·±½º¸¦ Âü°íÇÏ¸é¼ »ç¿ëÇØ¾ß ÇÑ´Ù. Áß¿äÇÑ °ÍÀº ´å³Ý¿¡¼´Â
½ÇÇàÁß¿¡ ŸÀÔÀÇ Á¤º¸¸¦ Á¶»çÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ̸ç ÀÌ·Î ÀÎÇØ ¿©·¯ °¡Áö ¾ÈÁ¤ÀûÀΠŸÀÔ °ü·Ã ÀÛ¾÷ÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀÌ´Ù.
¾î¶² ÀÛ¾÷ÀÌ °¡´ÉÇÑÁö ¾Õ Ç×ÀÇ TimeEquals ¿¹Á¦¸¦ ÅëÇØ ¾Ë¾Æº¸ÀÚ. ÀÌ ¿¹Á¦´Â Equals¸¦ ÀçÁ¤ÀÇÇÏ¿© ½Ã°£ °´Ã¼ÀÇ ³»¿ë³¢¸® ºñ±³Çϴµ¥ EqualsÀÇ º»Ã¼ Äڵ尡 ³Ê¹« ´ëÃæ ÀÛ¼ºµÇ¾î ÀÖ¾î À§ÇèÇÏ´Ù. MainÀ»
´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ ÈÄ Å×½ºÆ®ÇØ º¸ÀÚ.
class CSTest {
static
void Main() {
Time
A = new Time(1, 2, 3);
Time
B = null;
A.Equals(B);
}
}
ºñ±³ ´ë»ó °´Ã¼ÀÎ B¸¦ null·Î
ÃʱâÈÇÑ ÈÄ Equals·Î Àü´ÞÇß´Ù. ÄÄÆÄÀÏ ¿¡·¯´Â ¾Æ´ÏÁö¸¸ Equals´Â Àμö·Î ¹ÞÀº obj¸¦
(Time)À¸·Î ¹«Á¶°Ç ij½ºÆÃÇÏ¿© ´Ù¿îµÇ¾î ¹ö¸°´Ù. A.Equals("¾ðÁ¦µçÁö") ó·³ ¾û¶×ÇÑ °´Ã¼¸¦ Àü´ÞÇصµ ´Ù¿îµÈ´Ù. ¹®Á¦´Â Àü´Þ¹ÞÀº
Àμö¸¦ °Á¦ ij½ºÆÃÇѴٴµ¥ ÀÖ´Ù. Time Other = (Time)obj ¹®¿¡¼ obj°¡ ¹Ýµå½Ã TimeÀÇ °´Ã¼À̸ç
nullÀÌ ¾Æ´Ï¶ó´Â º¸ÀåÀÌ ¾ø´Ù. ¾î¶² °æ¿ì¶óµµ ´Ù¿îµÇÁö ¾Êµµ·Ï ÇÏ·Á¸é objÀÇ Å¸ÀÔ Á¤º¸¸¦ ½ÇÇàÁß¿¡ Á¶»çÇØ¾ß ÇÑ´Ù.
public override bool Equals(object obj) {
if
(obj == null || obj.GetType() != this.GetType()) return false;
Time
Other = (Time)obj;
return
(Other.hour == hour && Other.min == min && Other.sec == sec);
}
obj°¡ nullÀ̰ųª
ÀÌ Å¬·¡½º¿Í ´Ù¸¥ ŸÀÔÀ̸é false¸¦ ¸®ÅÏÇϵµ·Ï ¿¡·¯ ó¸®Çß´Ù. ÀÌ·±
Á¶°Ç 󸮰¡ °¡´ÉÇÏ·Á¸é objÀÇ Å¸ÀÔ Á¤º¸¸¦ ½ÇÇàÁß¿¡ Á¶»çÇØ¾ß Çϴµ¥ ÀÌ ±â´ÉÀÌ ¹Ù·Î ¸®Ç÷º¼ÇÀÌ´Ù. ¿¬»êÀÚ¸¦ »ç¿ëÇϸé Á» ´õ °£´ÜÇÏ°Ô ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
public override bool Equals(object obj) {
Time
Other = obj as Time;
if
(Other == null) return false;
return
(Other.hour == hour && Other.min == min && Other.sec == sec);
}
as ¿¬»êÀڷΠij½ºÆÃÇÏ¿© nullÀ̸é Time °´Ã¼°¡ ¾Æ´Ï´Ù. is, as °°Àº ¿¬»êÀÚ°¡ µ¿ÀÛÇÒ ¼ö ÀÖ´Â
ÀÌÀ¯µµ ¸®Ç÷º¼Ç ´öºÐÀÌ´Ù. as ¿¬»êÀÚ´Â ³»ºÎÀûÀ¸·Î ¸®Ç÷º¼ÇÀ» ÅëÇØ
objÀÇ Å¸ÀÔ Á¤º¸¸¦ Á¶»çÇÏ¿© obj°¡ TimeÀÇ
°´Ã¼ÀÎÁö ÆǺ°ÇÑ´Ù. is, as ¿¬»êÀÚ¸¸ Àß ½á¸Ô¾îµµ ¸®Ç÷º¼ÇÀÇ ÀÌÁ¡À» ÃæºÐÈ÷ È°¿ëÇÒ ¼ö ÀÖ´Ù.
¸íĪÀº ÄÄÆÄÀÏÁß¿¡¸¸ »ç¿ëµÇ¸ç ½ÇÇà ÆÄÀÏ·Î ¹Ù²î¸é ´õ ÀÌ»ó »ç¿ëÇÒ ÀÏÀÌ ¾ø´Â °ÍÀÌ º¸ÅëÀÌ´Ù. ÇÏÁö¸¸ ·Î±×¸¦ Ãâ·ÂÇϰųª »ç¿ëÀÚ¿¡°Ô º¯¼ö°ªÀ» Á÷Á¢ º¸¿©ÁÙ ¶§°¡ Àִµ¥ º¸Åë ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.
int value = 15;
Console.WriteLine("value = " + value);
¹®ÀÚ¿ ¾È¿¡ º¯¼ö À̸§À» Á÷Á¢ ÀûÀ¸¸é µÈ´Ù. ÀÌ »óÅ¿¡¼ value º¯¼öÀÇ À̸§À» ¹Ù²Ù¸é ¹®ÀÚ¿¾ÈÀÇ À̸§µµ ¹Ù²ã¾ß ÇÑ´Ù. º¯¼ö¸¸
¹Ù²Ù°í ¹®ÀÚ¿ ¾ÈÀ» ±×´ë·Î µÎ¸é ÄÄÆÄÀÏ¿¡´Â ÀÌ»óÀÌ ¾øÁö¸¸ Á¤È®ÇÏÁö ¾ÊÀº Á¤º¸¸¦ Ãâ·ÂÇÏ´Â ¼ÀÀÌ´Ù. ÀÌ·²
¶§ nameof ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¸é º¯¼ö¸íÀ» ¹®ÀÚ¿ ÇüÅ·Π±¸ÇØÁØ´Ù.
int value = 15;
Console.WriteLine(nameof(value) + " = "
+ value);
nameof(value)°¡ ¸®ÅÏÇÏ´Â °ªÀº "value"ÀÌ´Ù. ¹®ÀÚ¿·Î Á÷Á¢ À̸§À» ÁöÁ¤ÇÏ´Â
°Í°ú Å« Â÷ÀÌ´Â ¾øÁö¸¸ º¯¼ö¸íÀÌ ¹Ù²î¸é ¿¡·¯ 󸮵Ǿî Ç×»ó Á¤È®ÇÑ À̸§À» Ç¥±âÇϵµ·Ï °Á¦ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù.
nameof ¿¬»êÀÚ´Â ¼Ò¼ÓÀº »ý·«ÇÏ°í ¸¶Áö¸·ÀÇ ¸íĪ¸¸ ¸®ÅÏÇÑ´Ù.
string name = nameof(System.Console.WriteLine);
Console.WriteLine(name);
System.Console ¼Ò¼ÓÀº »©°í WriteLine À̸§¸¸ Ãâ·ÂÇÑ´Ù. ÄÚµå»ó¿¡¼ ¸íĪÀ» Á÷Á¢ ÂüÁ¶ÇÒ
ÀÏÀº ¹«Ã´ µå¹°´Ù. nameof ¿¬»êÀÚ´Â ½ÇÇàÁß¿¡ ¸íĪÀÇ À̸§À» ±¸ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÄÄÆÄÀÏÁß¿¡ ¹Ì¸®
ġȯµÇ±â ¶§¹®¿¡ ¸®Ç÷º¼Çº¸´Ù ºü¸£´Ù.