12. ๊ตฌ์กฐ์ฒด & ํŠœํ”Œ

2022. 4. 6. 09:25ยท๐Ÿ’ป Programming Language/C#

๊ตฌ์กฐ์ฒด(Struct) => ํ‚ค์›Œ๋“œ : struct ์‚ฌ์šฉ

using System;

namespace StructEx
{
    //๊ตฌ์กฐ์ฒด ์ •์˜ํ•˜๊ธฐ
    struct MyPoint
    {
        public int x;
        public int y;

        //**๊ตฌ์กฐ์ฒด๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋Š” ์„ ์–ธํ•  ์ˆ˜ ์—†๋‹ค.
        public MyPoint(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        // ๋ชจ๋“  ๊ตฌ์กฐ์ฒด๋Š” System.Object ํ˜•์‹์„ ์ƒ์†ํ•˜๋Š” System.ValueType์œผ๋กœ ๋ถ€ํ„ฐ ์ง์ ‘ ์ƒ์†๋ฐ›์Œ.

        public override string ToString()
        {
            return string.Format($"{x} {y}");
        }
    }
        class Program
        {
        static void Main(string[] args)
        {
            MyPoint myPoint;
            myPoint.x = 100;
            myPoint.y = 100;

            Console.WriteLine($"{myPoint.ToString()}");

            MyPoint myPoint2 = new MyPoint(1000, 1000);
            MyPoint myPoint3 = myPoint2;
            // ๊ตฌ์กฐ์ฒด๋Š” value type์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๊ฐ’์ด heap๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์ง€ ์•Š์•„
            // ์œ„์™€๊ฐ™์ด ๋ณต์‚ฌํ•ด๋„ ๊นŠ์€๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.(Ref type์˜ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ์–•์€ ๋ณต์‚ฌ)

            myPoint3.y = 1001;

            Console.WriteLine(myPoint2.ToString());
            Console.WriteLine(myPoint3.ToString());

        }
    }   
}
Output

100 100
1000 1000
1000 1001

  • C# ์—์„œ๋Š” struct๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด value type์„ ๋งŒ๋“ค๊ณ , class๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด reference type์„ ๋งŒ๋“ ๋‹ค.
    • int, double, float, bool ๊ณผ ๊ฐ™์€ type๋“ค์€ ๊ธฐ๋ณธ(primitive) type์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธํƒ€์ž…๋“ค์€ struct๋กœ ์ •์˜๋œ type์ด๋‹ค. ์ฆ‰, value type(๊ฐ’ ํ˜•์‹)์ด๋‹ค.
    • Value Type์€ ์ƒ์†ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ฃผ๋กœ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

  • Reference Type์€ class๋ฅผ ์ •์˜ํ•ด์„œ ๋งŒ๋“ค๊ณ , ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ข€ ๋” ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ๋“ค์„ ์ •์˜ํ•˜๋Š” ๊ณณ์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

  • ๊ตฌ์กฐ์ฒด(Struct) : struct๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ •์˜ํ•œ๋‹ค.
    • ํด๋ž˜์Šค์™€ ๊ฐ™์ด ๋ฉ”์†Œ๋“œ๋‚˜ ์†์„ฑ(ํ”„๋กœํผํ‹ฐ)๋“ฑ ๊ฑฐ์˜ ๋น„์Šทํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ์ƒ์†์„ ํ•  ์ˆ˜๋Š” ์—†๋‹ค.
    • ํด๋ž˜์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธํ„ฐํŽ˜์ด์Šค(interface) ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

MyPoint myPoint3 = myPoint2;
  • ๊ตฌ์กฐ์ฒด๋Š” value type์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๊ฐ’์ด heap๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์ง€ ์•Š์•„ ์œ„์™€๊ฐ™์ด ๋ณต์‚ฌํ•ด๋„ ๊นŠ์€๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.(reference type์˜ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ์–•์€ ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.)

ํŠœํ”Œ(Tuple) => ํ‚ค์›Œ๋“œ : () ์‚ฌ์šฉ

using System;

namespace TupleEx
{
    class Program
    {
        static void Main(string[] args)
        {
            var aa = ("ํ™๊ธธ๋™", 40); //unnamed tuple
            Console.WriteLine($"{aa.Item1}, { aa.Item2}");

            var bb = (Name: "ํ™๊ธธ๋ถ", Age: 55); //named tuple
            Console.WriteLine($"{bb.Name}, {bb.Age}");

            var (name, age) = bb; // ๊ฐ’์—๋‹ค๊ฐ€ ํŠœํ”Œ์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ํŠœํ”Œ ๋‚ด ์›์†Œ์˜ ๊ฐœ์ˆ˜์— ๋งž์ถœ๊ฒƒ.
            Console.WriteLine($"{name}, {age}");

            bb = aa; // ํŠœํ”Œ์€ Value Type์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์™€ ๊ฐ™์ด ๋ณต์‚ฌํ•ด๋„ ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)๊ฐ€ ์ด๋ฃจ์–ด ์ง„๋‹ค.
            Console.WriteLine($"{bb.Name}, {bb.Age}");
        }
    }
}
Output

ํ™๊ธธ๋™, 40
ํ™๊ธธ๋ถ, 55
ํ™๊ธธ๋ถ, 55
ํ™๊ธธ๋™, 40

  • C# 7.0 ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ๋ฉ”์†Œ๋“œ์—์„œ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ์ดํ›„ ๋ฒ„์ „์—์„œ๋Š” ํŠœํ”Œ์„ ์ด์šฉํ•ด์„œ ๋ณต์ˆ˜ ๊ฐœ์˜ ๊ฐ’๋“ค์„ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

  • Tuple(ํŠœํ”Œ) : ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ•„๋“œ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ฒด์™€ ๊ฐ™๋‹ค. => ()๋ฅผ ์ด์šฉํ•œ๋‹ค.
    • ํŠœํ”Œ์€ () ์•ˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ•„๋“œ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 bb = aa;
  • ํŠœํ”Œ๋„ Value Type์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์ด ํŠœํ”Œ ๋ณต์‚ฌ๋ฅผ ํ•˜์—ฌ๋„ ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

ํŠœํ”Œ ์„ ์–ธ
var t = (100, 200);
  • ์ด์ฒ˜๋Ÿผ ๋‚ด๋ถ€ ๋‘๊ฐœ์˜ ๊ฐ’์ด ์–ด๋–คํ•„๋“œ์ธ์ง€ ์ด๋ฆ„์ด ๋ช…์‹œ๋˜์–ด ์žˆ์ง€ ์•Š์€ ํŠœํ”Œ์„ Unnamed Tuple ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
var t = (Name : "ํ™๊ธธ๋™", Id : "1111")
  • ์ด์ฒ˜๋Ÿผ ๋‚ด๋ถ€ ๊ฐ’์˜ ์ด๋ฆ„์ด ๋ช…์‹œ๋˜์–ด ์žˆ๋Š” ํŠœํ”Œ์„ Named Tuple ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

'๐Ÿ’ป Programming Language > C#' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

14. ํ™•์žฅ ๋ฉ”์†Œ๋“œ  (0) 2022.04.06
13. ํŠœํ”Œ ๋ฆฌํ„ด ํƒ€์ž…์„ ์ด์šฉํ•œ ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•˜๊ธฐ  (0) 2022.04.06
11. ์˜ค๋ฒ„๋ผ์ด๋”ฉ(virtual, override, new)  (0) 2022.04.06
10. is ์—ฐ์‚ฐ์ž์™€ as ์—ฐ์‚ฐ์ž  (0) 2022.04.06
09. ์ƒ์†๊ด€๊ณ„์˜ ํด๋ž˜์Šค ํ˜•๋ณ€ํ™˜  (0) 2022.04.06
'๐Ÿ’ป Programming Language/C#' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • 14. ํ™•์žฅ ๋ฉ”์†Œ๋“œ
  • 13. ํŠœํ”Œ ๋ฆฌํ„ด ํƒ€์ž…์„ ์ด์šฉํ•œ ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•˜๊ธฐ
  • 11. ์˜ค๋ฒ„๋ผ์ด๋”ฉ(virtual, override, new)
  • 10. is ์—ฐ์‚ฐ์ž์™€ as ์—ฐ์‚ฐ์ž
S.Honey
S.Honey
  • S.Honey
    Algo ์“ฐ์ž
    S.Honey
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (123)
      • ํšŒ๊ณ  (0)
        • ์ทจ์—… ํ›„ ํšŒ๊ณ  (0)
      • ๐Ÿƒ Frontend Road-Map (2)
        • ๐Ÿšฉ Summary (1)
        • ๐Ÿ“š Road-Map Contents (1)
        • ๐ŸŸง HTML (0)
        • ๐ŸŸฆ CSS (0)
        • ๐ŸŸจ Javascript (0)
        • โฌœ React (0)
        • ๐ŸŸช Redux (0)
      • Backend (0)
        • QueryDSL (0)
      • ๐Ÿ’ป Programming Language (54)
        • C# (51)
        • Flutter-Dart (3)
        • Java (0)
      • ๐Ÿ“š Computer Science (4)
        • Algorithms (4)
        • Database (0)
        • Network (0)
        • Operating System(OS) (0)
      • ๐Ÿ’ฏ CodingTest (60)
        • BaekJoon (22)
        • Programmers (34)
        • CodeTree (4)
      • โœ’๏ธ Design Pattern (1)
      • ๐Ÿฑ Etc (2)
        • Jenkins Plugin ์ œ์ž‘๊ธฐ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

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

      • ๐Ÿ“– ๊ณต๋ถ€ ์ฐธ๊ณ  ๊ต์žฌ ๋ฐ ์ž๋ฃŒ
    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      BFS
      ์“ฐ์…จ์ž–์•„
      ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      ์‹œ๋ฎฌ๋ ˆ์ด์…˜
      ๋ฌธ์ž์—ด ํŒŒ์‹ฑ
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
      ์ž๋ฃŒ๊ตฌ์กฐ
      Java
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      BAEKJOON
      ์ฝ”๋“œํŠธ๋ฆฌ
      ๋ฐฑ์ค€
      ๊ตฌํ˜„
      ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰
      ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
      ์‚ผ์„ฑsw์—ญํ…Œ
      ์ด์ง„ํƒ์ƒ‰
      programmers
      DP
      JavaScript
      sort
      ์นด์นด์˜ค
      Flutter
      Algorithm
      DART
      c#
      ์Šคํ„ฐ๋””
      ํŒŒ์ด์ฌ
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      JS
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
    S.Honey
    12. ๊ตฌ์กฐ์ฒด & ํŠœํ”Œ
    ์ƒ๋‹จ์œผ๋กœ

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