๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90

 

 

 

 

๋ถˆ๋ณ€ ๊ฐ์ฒด(Immutable Object)

๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ๋‚ด๋ถ€ ์ƒํƒœ(๋ฐ์ดํ„ฐ)๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค. ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ํŠน์„ฑ ๋•Œ๋ฌธ์— ๋ถˆ๋ณ€ ๊ฐ์ฒด์—์„œ๋Š” ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ์™€ ๋น„๊ต๊ฐ€ ๋งŽ์ด ์ด๋ค„์ง„๋‹ค.

๋ ˆ์ฝ”๋“œ(record)๋Š” ์ด๋Ÿฐ ๋ถˆ๋ณ€ ๊ฐ์ฒด์—์„œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋Š” ๋ณต์‚ฌ์™€ ๋น„๊ต ์—ฐ์‚ฐ์„ ํŽธํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก C# 9.0์—์„œ ๋„์ž…๋œ ํ˜•์‹์ด๋‹ค.

 

record Transaction
{
    ...
}

 

 

"๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด๋กœ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€ ์•Š์•„?"

ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ํ˜•์‹์ด๋ฏ€๋กœ ๋ชจ๋“  ํ•„๋“œ๋ฅผ readonly๋กœ ์„ ์–ธํ•˜๋ฉด ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๊ตฌ์กฐ์ฒด๋Š” ๊ฐ’ ํ˜•์‹์ด๋ฏ€๋กœ readonly struct๋กœ ๊ตฌ์กฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๋ฉด ๋œ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ชจ๋“  ํ•„๋“œ๋ฅผ readonly๋กœ ์„ ์–ธํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ธฐ ๋•Œ๋ฌธ.

 

 

์ฐธ์กฐ ํ˜•์‹๊ณผ ๊ฐ’ ํ˜•์‹์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ?

 

๊ฐ’ ํ˜•์‹ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์— ํ• ๋‹นํ•  ๋•Œ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๊นŠ์€ ๋ณต์‚ฌ๋ž€, ๋ชจ๋“  ํ•„๋“œ๊ฐ€ ์ƒˆ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ํ•„๋“œ์— 1:1๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

๋ฐฐ์—ด์˜ ์š”์†Œ์— ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋Š˜ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ๊นŠ์€ ๋ณต์‚ฌ ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  ํ•„๋“œ๋ฅผ 1:1๋กœ ๋น„๊ตํ•ด์•ผ ํ•˜๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด์— ํ•„์š”ํ•œ ๋น„๊ต ๋ฐฉ๋ฒ•์ด๋‹ค.

๋‹ค๋งŒ, ํ•„๋“œ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๋ณต์‚ฌ ๋น„์šฉ์ด ์ปค์ง€๊ณ  ํŠนํžˆ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋” ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

 

์ฐธ์กฐ ํ˜•์‹์€ ์œ„์™€ ๊ฐ™์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†๋Š” ๊ฒƒ์ด ์žฅ์ ์ด๋‹ค. ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋งŒ ๋ณต์‚ฌํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ.

ํ•˜์ง€๋งŒ, ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

๋ณดํ†ต์€ object๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ Equals( ) ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด๋‹ค.

 

 

 

"๊ทธ๋Ÿฌ๋ฉด, ์ฐธ์กฐ ํ˜•์‹๊ณผ ๊ฐ’ ํ˜•์‹์˜ ์žฅ์ ๋งŒ ๊ฐ€์ ธ์˜จ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ๋ชป ๋งŒ๋“ค์–ด?"

๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ์ด๋ฒˆ ๊ธ€์—์„œ ์†Œ๊ฐœํ•˜๋Š”, C# 9.0์—์„œ ์ง€์›ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ(Record) ํ˜•์‹์ด๋‹ค.

์ฐธ์กฐ ํ˜•์‹์˜ ๋น„์šฉ ํšจ์œจ์„ ๊ฐ€์ง€๋ฉด์„œ๋„, ๊ฐ’ ํ˜•์‹์ฒ˜๋Ÿผ ๊นŠ์€ ๋ณต์‚ฌ ๋น„๊ต๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๋ ˆ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ•œ ๋ฒˆ ์•Œ์•„๋ณด์ž.

 

 

 

 

 

๋ ˆ์ฝ”๋“œ ์„ ์–ธํ•˜๊ธฐ

๋ ˆ์ฝ”๋“œ๋Š” record ํ‚ค์›Œ๋“œ์™€ ์ดˆ๊ธฐํ™” ์ „์šฉ ์ž๋™ ๊ตฌํ˜„ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ•จ๊ป˜ ์ด์šฉํ•ด์„œ ์„ ์–ธํ•œ๋‹ค.

๋ฌผ๋ก  ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ํ”„๋กœํผํ‹ฐ์™€ ํ•„๋“œ ๋˜ํ•œ ์ž์œ ๋กญ๊ฒŒ ์„ ์–ธํ•ด ๋„ฃ์„ ์ˆ˜ ์žˆ๊ธด ํ•˜๋‹ค.

 

record Transaction
{
    public string From { get; init; }
    public string To   { get; init; }
    public int Amount  { get; init; }
}

 

์ด๋ ‡๊ฒŒ ์„ ์–ธํ•œ ๋ ˆ์ฝ”๋“œ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋ถˆ๋ณ€ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด ์ง„๋‹ค.

Transaction T1 = new Transaction {From="Alice", To="Bob", Amount=100};
Transaction T2 = new Transaction {From="Bob", To="Charlie", Amount=300};

 

 

with๋ฅผ ์ด์šฉํ•œ ๋ ˆ์ฝ”๋“œ ๋ณต์‚ฌ

C# ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ ˆ์ฝ”๋“œ ํ˜•์‹์„ ์œ„ํ•œ ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

ํ•˜์ง€๋งŒ, ์ด ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋Š” protected๋กœ ์„ ์–ธ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด with ์‹์„ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.

Transaction T1 = new Transaction {From="Alice", To="Bob", Amount=100};
Transaction T2 = with T1 {To="Charlie"};

 

T1์˜ ๋ชจ๋“  ๊ฐ’์„ T2์— ๋ณต์‚ฌํ•œ ๋‹ค์Œ, T2์˜ 'To' ํ”„๋กœํผํ‹ฐ๋งŒ "Charlie"๋กœ ์ˆ˜์ •ํ•œ ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ์œ ์šฉํ•˜๊ฒŒ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๋ ˆ์ฝ”๋“œ ๊ฐ์ฒด ๋น„๊ตํ•˜๊ธฐ

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ ˆ์ฝ”๋“œ์˜ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜๋Š” Equals( ) ๋ฉ”์†Œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

๋ ˆ์ฝ”๋“œ๋Š” ์ฐธ์กฐ ํ˜•์‹์ด์ง€๋งŒ ๊ฐ’ ํ˜•์‹์ฒ˜๋Ÿผ Equals( ) ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

Transaction T1 = new Transaction {From="Alice", To="Bob", Amount=100};
Transaction T2 = new Transaction {From="Alice", To="Bob", Amount=100};

Console.WriteLine(T1.Equals(T2));       // True

 

 

 

 

 

 

  • ์ด ๊ธ€์€ <์ด๊ฒƒ์ด C#์ด๋‹ค> ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.
728x90
๋ฐ˜์‘ํ˜•