*๋ ์ฝ๋ ํํธ์ด์ง๋ง C# 9.0 ์ด์๋ถํฐ ์ง์ํ๋ ๊ฐ๋ ์ด๋ผ ๋ณธ ๋ธ๋ก๊ทธ์์๋ ํด๋์ค๋ก ๊ตฌํํ๋ ๋ฐ๋ง ๊ธฐ๋ก ๋จ๊ธฐ๊ธฐ๋ก ๊ฒฐ์ *
๋ถ๋ณ ๊ฐ์ฒด๋ ๋ด๋ถ ์ํ(๋ฐ์ดํฐ)๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค๋ ํน์ฑ ๋๋ฌธ์ ๋ถ๋ณ ๊ฐ์ฒด์์๋ ๋ฐ์ดํฐ ๋ณต์ฌ์ ๋น๊ต๊ฐ ๋ง์ด ์ด๋ฃจ์ด์ง๋ค.
์๋ก์ด ์ํ๋ฅผ ํํํ๋ ค๊ณ (1)๊ธฐ์กด ์ํ๋ฅผ ๋ณต์ฌํ ๋ค,
์ด ์ค(2) ์ผ๋ถ๋ฅผ ์์ ํด์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ,
(3) ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๊ฐ์ฒด ๋ด์ฉ์ ์์ฃผ ๋น๊ตํ๋ค.
(๋ ์ฝ๋๋ ๋ถ๋ณ ๊ฐ์ฒด์์ ๋น๋ฒํ๊ฒ ์ด๋ค์ง๋ ์ด ๋ ๊ฐ์ง ์ฐ์ฐ์ ํธ๋ฆฌํ๊ฒ ์ํํ ์ ์๋๋ก C# 9.0์์ ๋์ ๋ ํ์์ด๋ค.)
์ฐธ์กฐ ํ์์ ํด๋์ค์ ๋ชจ๋ ํ๋๋ฅผ readonly๋ก ์ ์ธํ๋ฉด ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค.
๊ฐ ํ์์ readonly struct๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ธํ๋ฉด ๋๋ค.
์ปดํ์ผ๋ฌ๊ฐ ๋ชจ๋ ํ๋๋ฅผ readonly๋ก ์ ์ธํ๋๋ก ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ ํ์ ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ํ ๋นํ ๋ ๊น์ ๋ณต์ฌ๋ฅผ ์ํํ๋ค.
๊น์ ๋ณต์ฌ๋ ๋ชจ๋ ํ๋๋ฅผ ์ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ํ๋์ 1:1๋ก ๋ณต์ฌํ๋ ๊ฒ์ ๋งํ๋ค.
ํ๋๊ฐ ๋ง์ผ๋ฉด ๋ง์์๋ก ๋ณต์ฌ ๋น์ฉ์ ์ปค์ง๋ค.(๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ์ ๋ ์ปค์ง๋ค.)
์ฐธ์กฐ ํ์์ ์์ ๊ฐ์ ์ค๋ฒํค๋๊ฐ ์๋ค. (๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ง ๋ณต์ฌํ๋ฉด ๋๋๊น)
๋ค๋ง, ์ฐธ์กฐ ํ์์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๊น์ ๋ณต์ฌ๋ฅผ ๊ตฌํํด์ผ ๋๋ค.
๊ฐ ํ์์ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฉ์ ๋น๊ตํ๋๋ฐ ๋ชจ๋ ํ๋๋ฅผ 1:1๋ก ๋น๊ตํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐธ์กฐ ํ์๋ผ๋ฆฌ ๋ด์ฉ ๋น๊ต๋ฅผ ํ ์ ์์ผ๋ ค๋ฉด ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๋น๊ต ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
[๋ณดํต์ object๋ก๋ถํฐ ์์ํ๋ Equals() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ค.]
๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์์ผ๋ก ์ ์ธํ๋ฉด ํจ์ ํธ์ถ ์ธ์๋ ์ปฌ๋ ์ ์์๋ก ์ฌ์ฉํ ๋
๋ณต์ฌ ๋น์ฉ์ ์ค์ผ ์ ์๋ค.
ํํธ ๋ถ๋ณ ๊ฐ์ฒด๋ ์ ์ํ ํํ๊ณผ ์ํ ํ์ธ์ ์ํด ๊น์ ๋ณต์ฌ์ ๋ด์ฉ ๋น๊ต๊ฐ ํ์์ ์ด๋ฏ๋ก ๊ฐ ํ์์ผ๋ก ์ ์ธํ๋ ํธ์ด ํ๋ก๊ทธ๋๋จธ์๊ฒ๋ ํธ๋ฆฌํ ๋ถ๋ถ์ด ๋ง์ ๊ฒ์ด๋ค.
๋ถ๋ณ ์ฐธ์กฐ ํ์์ ๋น์ฉ ํจ์จ๊ณผ ๋ถ๋ณ ๊ฐ ํ์์ ํธ๋ฆฌํจ์ ๋ชจ๋ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ด...๋ ์ฝ๋ ํ์์ด๋ค. ^^
๋ ์ฝ๋ ํ์์ ๊ฐ ํ์์ฒ๋ผ ๋ค๋ฃฐ ์ ์๋ ๋ถ๋ณ ์ฐธ์กฐ ํ์์ผ๋ก,
์ฐธ์กฐ ํ์์ ๋น์ฉ ํจ์จ๊ณผ ๊ฐ ํ์์ด ์ฃผ๋ ํธ๋ฆฌํจ์ ๋ชจ๋ ์ ๊ณตํ๋ค.
<๋ ์ฝ๋ ์ ์ธ>
๋ ์ฝ๋๋ record ํค์๋์ ์ด๊ธฐํ ์ ์ฉ ์๋ ๊ตฌํ ํ๋กํผํฐ๋ฅผ ํจ๊ป ์ด์ฉํด์ ์ ์ธํ๋ค.
record RTransaction
{
public string From {get; init;}
public string To {get; init;}
public string Amount {get; init;}
}
RTransaction tr1 = new RTransaction{From="Alice", To="Bob",Amount=100};
RTransaction tr2 = new RTransaction{From="Bob", To="Charlie", Amount = 300};
์์ ๊ฐ์ด ์ ์ธํ ๋ ์ฝ๋๋ก ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ฉด ๋ถ๋ณ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ค.
<with ํค์๋ ํ์ฉ>
๋น์ฅ์ ํ์ฉ ์ฌ์ง๊ฐ ์์ ๊ฒ ๊ฐ์์, ๊ธฐ๋ก ์๋ต-!
<๋ ์ฝ๋ ๊ฐ์ฒด ๋น๊ตํ๊ธฐ>
์ปดํ์ผ๋ฌ๋ ๋ ์ฝ๋์ ์ํ๋ฅผ ๋น๊ตํ๋ Equals() ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ๊ตฌํํ๋ค.
-ํด๋์ค ๊ฐ์ฒด ์ํ ๋น๊ต๋ฅผ ์ํ Equals() ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ์์
class CTransaction
{
public string From {get; init;}
public string To {get; init;}
public int Amount {get; init;}
public override bool Equals(Object obj)
{
CTransaction target = ()obj;
if(this.From == target.From && this.To == target.To && this.Amount == target.Amount)
return true;
else return false;
}
}
Equals()๋ฅผ ๋ช ์์ ์ผ๋ก ๊ตฌํํ๋ CTransaction์ ์ธ์คํด์ค ๋ ๊ฐ๊ฐ ๊ฐ์ ์ํ๋ฅผ ๊ฐ๊ณ ์์ ๋,
์ด ๋์ ๋น๊ตํ๋ฉด ์ฐธ(True)์ด ๋ฐํ๋๋ค.
- ํ๋ฒํ ๋ ์ฝ๋ ์ ์ธ์์ (๋ ์ฝ๋๋ ์ฐธ์กฐํ์์ด์ง๋ง ๊ฐ ํ์์ฒ๋ผ Equals() ๋ฉ์๋๋ฅผ ๊ตฌํํ์ง ์์๋ ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ค)
record CTransaction
{
public string From {get; init;}
public string To {get; init;}
public int Amount {get; init;}
}
<์์ > ํด๋์ค๋ก ๋ถ๋ณ ๊ฐ์ฒด ๊ตฌํํ๊ธฐ...์ด๊ณ ์ถ์๋๋ฐ ๊ทธ๋ง์ ๋ ํ์ฌ ๋์C# ์ปดํ์ผ๋ฌ ๋ฒ์ ์์ค์ด ๋ฎ์ ๊ด๊ณ์
ํ๋กํผํฐ Init ๋์ set์ผ๋ก ์์ฑํ์๋ค..
Equals ๋น๊ต ์ฐ์ฐ ์ค๋ฒ๋ผ์ด๋ฉํ๊ณ ํธ์ถํด๋ณด๋ ๊ฒ์ ํ๋ฒ ๊ตฌ๋ํด๋ดค๋ค๋๋ฐ ์์๋ฅผ ๋๊ธฐ๋ก..
using System;
namespace Record
{
class CTransaction
{
public string From{ get; set; }
public string To { get; set; }
public int Amount { get; set; }
public override string ToString()
{
return $"{From,-10} -> {To,-10} : ${Amount}";
}
public override bool Equals(object obj)
{
CTransaction target = (CTransaction)obj;
if(this.From == target.From && this.To == target.To && this.Amount == target.Amount) return true;
else return false;
}
}
class MainApp
{
static void Main(string[] args)
{
CTransaction tr1 = new CTransaction { From="Alice", To="Bob",Amount=100 };
CTransaction tr2 = new CTransaction { From = "Bob", To = "Charlie", Amount = 50 };
Console.WriteLine(tr1);
Console.WriteLine(tr2);
Console.WriteLine($"tr1 equals to tr2 : {tr1.Equals(tr2)}");
CTransaction tr3 = new CTransaction { From = "Charlie", To = "Alice", Amount = 50 };
CTransaction tr4 = new CTransaction { From = "Charlie", To = "Alice", Amount = 50 };
Console.WriteLine($"tr3 equals to tr4 : {tr3.Equals(tr4)}");
}
}
}
<์ถ๋ ฅ ๊ฒฐ๊ณผ>
Alice -> Bob : $100
Bob -> Charlie : $50
tr1 equals to tr2 : False
tr3 equals to tr4 : True
'C# > ์ด๊ฒ์ด C#์ด๋ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
44. ์ธํฐํ์ด์ค์ ํ๋กํผํฐ (0) | 2022.02.23 |
---|---|
43. ๋ฌด๋ช ํ์ (0) | 2022.02.23 |
41. ํ๋กํผํฐ์ ์์ฑ์ (0) | 2022.02.22 |
40. ์๋ ๊ตฌํ ํ๋กํผํฐ (0) | 2022.02.22 |
39. ํ๋กํผํฐ ๊ธฐ๋ณธํ ์ ์ธ (0) | 2022.02.22 |