Struct vs Class

C++¿¡¼­ ±¸Á¶Ã¼¿Í Ŭ·¡½ºÀÇ Â÷ÀÌ´Â ±âº» Á¢±Ù ±ÇÇÑÀÚ Â÷À̹ۿ¡ ¾ø´Ù.
Ŭ·¡½º´Â µðÆúÆ®·Î private, ±¸Á¶Ã¼´Â publicÀ» °¡Áø´Ù.

C#µµ C++°ú °°À»±î?

¾Æ´Ï´Ù. µÑÀº ¿ÏÀüÈ÷ ´Ù¸¥´Ù.

< C# ±¸Á¶Ã¼¿Í  Å¬·¡½º Â÷ÀÌÁ¡ >

Ŭ·¡½º´Â ÂüÁ¶ ŸÀÔÀ̸ç Èü¿¡¸¸ »ý¼ºµÊ
±¸Á¶Ã¼´Â °© ŸÀÔÀ¸·Î ½ºÅðú Èü¿¡ »ý¼ºµÈ´Ù.
±¸Á¶Ã¼¾È¿¡¼­ Á÷Á¢ ÃʱâÈ­¸¦ ¸øÇÑ´Ù.
Ŭ·¡½º ¹è¿­À» ¸¸µé¸é ÇÒ´çÀü¿¡´Â null·Î ÃʱâÈ­ µÈ´Ù.
±¸Á¶Ã¼ ¹è¿­À» ¸¸µé¸é ¸ðµç °ªÀÌ ±âº»ÀûÀ¸·Î ÇÒ´çµÈ´Ù.

< ±¸Á¶Ã¼´Â °ªÃ³·³ »ý¼º ÇÒ¼ö ÀÖ´Ù >

±¸Á¶Ã¼´Â new¸¦ ÀÌ¿ëÇØ »ý¼º ÇÒ ¼öµµ ÀÖÁö¸¸ ¾Æ·¡¿Í °°ÀÌ °ªÃ³·³ »ý¼ºÇؼ­ »ç¿ë ÇÒ ¼öµµ ÀÖ´Ù.
À̶§´Â ÈüÀÌ ¾Æ´Ï¶ó ½ºÅÿ¡ »ý¼º µÈ´Ù.

    struct People
    {
        public string name;
        public string age;
    }

    class Test
    {
        public Test()
        {
            People p;
            p.name = "simpson";
            p.age = "20";
            Console.WriteLine("Value {0}, {1}", p.name, p.age);
        }
    }

 


< Ŭ·¡½º¿Í ±¸Á¶Ã¼ÀÇ ¸®ÅÏ°ª Â÷ÀÌÁ¡ >

±¸Á¶Ã¼¸¦ °ª ŸÀÔÀÌ¶ó ¸®ÅÏ °ªÀ» ¹Ù²Ü¼ö ¾ø´Ù.
Ŭ·¡½º´Â ÂüÁ¶ ŸÀÔÀÌ¶ó ¸®ÅÏ°ªÀ» º¯°æ ÇÒ ¼ö ÀÖ´Ù.

class Class

{

    public int a;

}

struct Struct

{

    public int a;

}

 

 

namespace struct_vs_class

{

    class Program

    {

        static Class mClass;

        static Struct mStruct;

        static Class CreateClass()

        {

            mClass = new Class();

            return mClass;

        }

 

        static Struct CreateStruct()

        {

            mStruct = new Struct();

            return mStruct;

        }

 

        static void Main(string[] args)

        {

            CreateClass().a = 100;

            //CreateStruct().a = 100;

            //¿À·ù CS1612: º¯¼ö°¡ ¾Æ´Ï¹Ç·Î 'struct_vs_class.Program.CreateStruct()'ÀÇ ¹Ýȯ °ªÀ» ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù.

            Struct s = CreateStruct();

            s.a = 100;

 

            Console.WriteLine( "Class: " + mClass.a + "  Struct: " + mStruct.a);

        }

    }

}

°á°ú :

Class: 100  Struct: 0

 

< Ŭ·¡½º¿Í ±¸Á¶Ã¼ ¹è¿­ Â÷ÀÌÁ¡ >

Ŭ·¡½º ¹è¿­Àº null·Î ÃʱâÈ­ µÈ´Ù.
±¸Á¶Ã¼ ¹è¿­Àº µðÆúÆ® °ªÀÌ ¸ðµÎ ÇÒ´ç µÈ´Ù.
 

class Class

{

    public int a = 0;

}

struct Struct

{

    //public int a = 0; ÃʱâÈ­ ¸øÇÔ

    public int a;

}

 

 

namespace struct_vs_class

{

    class Program

    {

        static Class [] mClass = new Class[2];

        static Struct [] mStruct = new Struct[2];

 

        static void Main(string[] args)

        {

            Console.WriteLine( "Class is null: " + (mClass[0]==null) + "  Struct: " + mStruct[0]);

        }

    }

}

°á°ú :

Class is null: True  Struct: Struct

 

< ¸Þ¸ð¸® Â÷ÀÌ >

ÂüÁ¶ : http://www.dotnetperls.com/struct

Class version

 

Size of List:

1 object
512 KB

Size of internal array:

100000 objects
3.8 MB

Struct version

 

Size of List:

1 object
24 bytes

Size of internal array:

100000  object
4.0 MB

¿ÀºêÁ§Æ® ÇÑ °³À϶§´Â ±¸Á¶Ã¼°¡ ¸Þ¸ð¸® ¿ë·®ÀÌ ÀÛÁö¸¸, ¹è¿­ÀÏ´ë´Â Ŭ·¡½ºÀÇ ¸Þ¸ð¸® ¿ë·®ÀÌ ´õ ÀÛ´Ù.
±¸Á¶Ã¼°¡ °ª¿¡ ÀÇÇÑ È£ÃâÀ̶ó ¹è¿­À϶§ ´õ ¸¹Àº ¿ë·®À» Â÷ÁöÇÑ´Ù.

< ÇÒ´ç ¼Óµµ Â÷ÀÌ >

ÂüÁ¶ : http://www.dotnetperls.com/struct

Class with 8 ints:               2418 ms
Struct with 8 ints:               936 ms [faster]

Class with 4 string references:  2184 ms
Struct with 4 string references:  795 ms [faster]

10¸¸ ¹Ýº¹À» 1000¸¸ ·çÇÁ·Î ¹Ýº¹ Çؼ­ ¿ÀºêÁ§Æ®¸¦ »ý¼º ÇßÀ» ¶§ Â÷ÀÌÀÌ´Ù.
±¸Á¶Ã¼°¡ ÈξÀ ºü¸¥´Ù.
ÀÌ·¸°Ô ¸¹Àº µ¥ÀÌÅ͸¦ ÇѲ¨¹ø¿¡ »ý¼ºÇÏÁö ¾Ê´Â´Ù¸é ±¸Á¶Ã¼µç Ŭ·¡½ºµç ¹» »ç¿ë ÇÏ´øÁö »ó°üÀÌ ¾øÀ» °ÍÀÌ´Ù.