์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- c#
- BFS
- ์ฝ๋ฉํ ์คํธ
- ๋ฐฑ์ค
- ๊ทธ๋ํ ํ์
- ๋ฌธ์์ด ํ์ฑ
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- Flutter
- ํ๋ก๊ทธ๋๋จธ์ค
- Algorithm
- Java
- BAEKJOON
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์นด์นด์ค
- sort
- ์ฐ์ จ์์
- ๋ชป๊ทธ๋ฆฌ์ง๋ง
- ํ์ด์ฌ
- ์ผ์ฑsw์ญํ
- JavaScript
- ์คํฐ๋
- JS
- DART
- programmers
- ๊ตฌํ
- DP
- ์ด์งํ์
- ์ฝ๋ํธ๋ฆฌ
- ์๊ณ ๋ฆฌ์ฆ
- ์๋ฃ๊ตฌ์กฐ
Archives
- Today
- Total
Algo ์ฐ์
12. ๊ตฌ์กฐ์ฒด & ํํ ๋ณธ๋ฌธ
๊ตฌ์กฐ์ฒด(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
์ ์์ํ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก ๊ฐ๋จํ ๋ฐ์ดํฐ ๊ฐ์ ์ ์ฅํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- int, double, float, bool ๊ณผ ๊ฐ์ 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 |