๋ ์ฝ๋
๋ ์ฝ๋๋ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ๋ฌํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ฉฐ, ๋ถ๋ณ์ฑ(immutable)์ ์ ์งํ๋๋ก ์ค๊ณ๋์ด ์๋ค. ์ฆ, ๋ ์ฝ๋์ ํ๋๋ ์ด๊ธฐํ ํ์๋ ์์ ํ ์ ์๋ค.
readonly๋ ๋ถ๋ณ์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. readonly๋ ํ๋๋ ํด๋น ํ๋๋ฅผ ์ ์ธํ ํด๋์ค ๋ด์์๋ง ๊ฐ์ ํ ๋นํ๊ณ , ํ ๋น ํ์๋ ๋ณ๊ฒฝํ ์ ์๋ ๋ถ๋ณ ํ๋์ด๊ณ , ๋ ์ฝ๋๋ ์ด๋ฌํ ๋ถ๋ณ์ฑ์ ๊ฐ๋
์ ๋์ฑ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ ๊ณต๋๋ ๊ฐ๋
์ด๋ค.
public record Person {
public string Name { get; init; }
public string Age { get; init; }
}
class Program {
static void Main(string[] args) {
Person person = new Person {
Name = "John",
Age = "30"
};
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
์ด๋ ๊ฒ person์ John, 30์ด๋ผ๋ ๊ฐ์ ์ด๊ธฐํํด์ฃผ๊ฒ ๋๋ฉด, ์ด ๊ฐ์ ๋ถ๋ณ์ด ๋๋ค.
person.Name="Happy"๋ผ๊ณ ๊ฐ์ ๋ค์ ์ค์ ํด์ฃผ๋ ค๊ณ ํ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฌ๋ค.
๋ง์ฝ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด with๋ฅผ ์ฌ์ฉํด์ ์๋ก์ด ๋ ์ฝ๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๋ณ๊ฒฝ๋ ๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
Person newPerson = person with { Name = "Happy" };
with๋ person์ ๋ชจ๋ ์ํ๋ฅผ ๋ณต์ฌํ ๋ค์, Name์ ํ๋กํผํฐ ๊ฐ๋ง Happy๋ก ๋ณ๊ฒฝํด์ค๋ค.
๋ ์ฝ๋์ Equals()
์๋ Equals() ๋ฉ์๋๋ ์ฐธ์กฐ๋ฅผ ๋น๊ตํ๋ค. ์ฆ, ๊ฐ์ด ๊ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋ค๋ฅด๋ฉด False๊ฐ ๋์ค๊ฒ ๋๋ค.
ํ์ง๋ง ๋ ์ฝ๋๋ ์๋์ผ๋ก Equals() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ์ฐธ์กฐ ๋น๊ต๊ฐ ์๋ ๊ฐ ๋น๊ต๋ฅผ ํ๊ฒ ๋๋ค.
namespace RecordComp
{
class CTransaction
{
public string From { get; init; }
public string To { get; init; }
public int Amount { get; init; }
public override string ToString()
{
return $"{From,-10} -> {To,-10} : ${Amount}";
}
}
record RTransaction
{
public string From { get; init; }
public string To { get; init; }
public int Amount { get; init; }
public override string ToString()
{
return $"{From,-10} -> {To,-10} : ${Amount}";
}
}
class MainApp
{
static void Main(string[] args )
{
CTransaction c1 = new CTransaction { From = "Alice", To = "Bob", Amount = 100 };
CTransaction c2 = new CTransaction { From = "Alice", To = "Bob", Amount = 100 };
Console.WriteLine(c1);
Console.WriteLine(c2);
Console.WriteLine(c1.Equals(c2)); // Equals๋ ์ฐธ์กฐ๋ฅผ ๋น๊ตํ๋๋ฐ, c1๊ณผ c2๋ ์ฐธ์กฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ False๊ฐ ๋์ด
RTransaction r1 = new RTransaction { From = "Alice", To = "Bob", Amount = 100 };
RTransaction r2 = new RTransaction { From = "Alice", To = "Bob", Amount = 100 };
Console.WriteLine(r1);
Console.WriteLine(r2);
Console.WriteLine(r1.Equals(r2)); // ๋ ์ฝ๋๋ ์๋์ผ๋ก Equals ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ํ๋ ๊ฐ์ ๋น๊ตํ๋๋ก ํจ. ์ฆ, ์ฐธ์กฐ๊ฐ ๋ฌ๋ผ๋ true๊ฐ ๋์ฌ ์ ์์
RTransaction r3 = r1 with { Amount = 300 };
Console.WriteLine(r3);
Console.WriteLine(r1.Equals(r3)); // ํ๋๊ฐ์ด ๋ค๋ฅด๋ฉด false๊ฐ ๋์ค๊ฒ ๋จ
}
}
}
์ ์๋์ผ๋ก ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋๋ ๊ฒ์ผ๊น?
๊ทธ ์ด์ ๋ ๋ ์ฝ๋๋ผ๋ฆฌ ์ฐธ์กฐ ๋น๊ต๋ ํญ์ false์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ ์ฝ๋๋ ๊ฐ์ ์ ์ฅํ๊ณ ๋ํ๋ด๋ ๋ฐ ์ค์ ์ ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค. ๋ ์ฝ๋๋ ๊ฐ(value) ํ์ ์ผ๋ก ์ทจ๊ธ๋๋ฉฐ ๊ฐ ๋น๊ต๊ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์ ๋ ์ฝ๋๋ผ๋ฆฌ์ ์ฐธ์กฐ ๋น๊ต๋ ์๋ฏธ๊ฐ ์๋ค.
'๐ฅ๏ธ > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C#] ๋ฐฐ์ด ๋ค๋ฃจ๊ธฐ (0) | 2023.08.21 |
---|---|
[์ด๊ฒ์ด C#์ด๋ค] Chapter09: ์ฐ์ต๋ฌธ์ (0) | 2023.08.20 |
[C#] ํ๋กํผํฐ (0) | 2023.08.18 |
[์ด๊ฒ์ด C#์ด๋ค] Chapter08: ์ฐ์ต๋ฌธ์ (0) | 2023.08.18 |
[C#] ์ธํฐํ์ด์ค์ ์ถ์ํด๋์ค (0) | 2023.08.18 |