code
2์ 8, 2024, 5:15์ค์
1
์ด๋ฒ์ ๊ฐํน ๋์น ๋๊ฐ ์๋ ๊ธฐ์ด์ ์ธ ๋ด์ฉ์ ๋ํด ์ ์ด ๋ณด๊ฒ ์ต๋๋ค.
c#์์ struct๋ฅผ property๋ก ์ฌ์ฉํ ๋ ์ฃผ์ ํด์ผํ ์ ์ด ์์ต๋๋ค.
internal class Program
{
static void Main(string[] args)
{
var test = new TestClass();
test.Foo();
}
}
public class TestClass
{
public TestStruct Val1 { get; set; }
public TestStruct Val2;
private TestStruct _val;
public TestStruct Val3
{
get { return _val; }
set { _val = value; }
}
public void Foo()
{
Val1.SetValue();
Console.WriteLine(Val1.Value);
Val2.SetValue();
Console.WriteLine(Val2.Value);
Val3.SetValue();
Console.WriteLine(Val3.Value);
_val.SetValue();
Console.WriteLine(Val3.Value);
}
}
public struct TestStruct
{
public int Value;
public void SetValue()
{
Value = 10;
}
}
์ ์์ค๋ฅผ ์คํ ํ์ ๋ ๊ฒฐ๊ณผ๊ฐ ์์ ๋์๋์?
โ
10
10
10
10
์ด ๋์ฌ๊ฑฐ ๊ฐ์ง๋ง
โ
์ค์ ๊ฒฐ๊ณผ๋
0
10
0
10
์ด ๋์ต๋๋ค.
โ
์์ธ์ c# ์์ property์ get์
์ฐธ์กฐ ํ์
์ ๊ฒฝ์ฐ ํด๋น ์ฐธ์กฐ๋ฅผ ๊ทธ๋๋ก ์ ๋ฌ ํ์ง๋ง
๊ฐ ํ์
์ ๊ฒฝ์ฐ ๋ณต์ฌ๋ณธ์ ์ ๋ฌ ํ๊ฒ ๋ฉ๋๋ค.
โ
Val1.SetValue(); ์ ๊ฒฝ์ฐ
๋ณต์ฌ ๋ ์์ TestStruct ์ Value ๋ฅผ 10์ผ๋ก ์ค์ ํ๊ฒ์ด๊ธฐ ๋๋ฌธ์
์ค์ Val1์ Value๋ ๋ณํ๊ฐ ์์ต๋๋ค.
โ
ํ์ง๋ง set์ ์ค์ property์ ์ ์ฅ ๋๋ฏ๋ก
ํค๊น๋ฆฌ์ง ์๋๋ก ์ฃผ์ ํด์ผ ํฉ๋๋ค.
11๊ฐ์ ์ข์์
์กฐ๊ธ ๋ค๋ฅธ ์ฃผ์ ๊ฐ ๋ ์๋ ์์ง๋ง, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ ํ์
์ ๊ฐ์ฒ๋ผ ๋์ํ๋๋ก ๋ง๋ค์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ์ฒ๋ผ ๋์ํ๋ค๋ ๊ฒ์ ๋ค๋ฅด๊ฒ ๋งํ๋ฉด ๋ถ๋ณ ๊ฐ์ฒด (immutable object)์ฌ์ผ ํ๋ค๋ ๋ป์
๋๋ค. ์ ์๊ฐํด ๋ณด๋ฉด System.Int32
, System.Char
๊ณผ ๊ฐ์ ํ์
๋ค๋ ๋ชจ๋ ๊ฐ ํ์
์ธ๋ฐ ์์ ๊ฐ์ ํผ๋์ ๊ฒช์ง ์์ต๋๋ค. ์ ๊ทธ๋ด๊น ์๊ฐํด ๋ณด๋ฉด ํด๋น ํ์
๋ค์ด ๋ชจ๋ ๋ถ๋ณ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ฐ์ฒด๊ฐ ๋ถ๋ณ์ด๋ผ๋ ๊ฒ์ ์ฐธ์กฐ๋ฅผ ํตํด ์ ๋ฌ๋์๋ ์ฌ๋ณธ์ ํตํด ์ ๋ฌ๋์๋ ์ธ์ ๋ ์ํ์ ๋ณํ๊ฐ ์ ํ๋์ง ์๋๋ค๋ ๋ป์ด ๋ฉ๋๋ค. ๋น์ฐํฉ๋๋ค. ์ํ๋ฅผ ๋ฐ๊ฟ ์ ์๊ฒ ๋ง์๋๊ธฐ ๋๋ฌธ์ ์ํ์ ๋ณํ๊ฐ ์ ํ๋ ์ง๋ฅผ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ ๊ฒ์
๋๋ค. ๊ทธ๋์ ๋ถ๋ณ์ฑ(immutability)์ ํํ ๋ฌด์ํ์ฑ(statelessness)์ด๋ผ๊ณ ํํํ๊ธฐ๋ ํฉ๋๋ค. ๋ถ๋ณ ๊ฐ์ฒด๋ ์ฐธ์กฐ๋ฅผ ํตํด ์ ๋ฌ๋๋ ์ฌ๋ณธ์ ํตํด ์ ๋ฌ๋๋ ์๋ฏธ๋ก ์ ๋ณํ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํท๊ฐ๋ฆด ์ผ์ด ์๋ ๊ฒ์
๋๋ค.
C#์์๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ ๋ ์์ ์ด ํ์
์ด ๋ถ๋ณ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์๋๋ก ๊ฐ์ ํ ์๋จ๋ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ก readonly struct
ํค์๋ ๋ฅผ ์ฐ๋ ๊ฒ์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ํ๋๋ฅผ readonly
๋ก ์ ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ํ๋ฅผ ๋ฐ๊ฟ ์ ์๊ฒ ๋ฉ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก๋ ์ฑ๋ฅ์ ์ํด ๋ณด์ด์ง ์๋ ์บ์๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๋ณด์กดํด์ผ ํ๋ค๊ฑฐ๋ ํ๋ ํน์ํ ์ํฉ์ด ์๋๋ฉด ๊ตฌ์กฐ์ฒด๋ ํญ์ readonly
๋ก๋ง ์ ์ธํ๋ ํธ์
๋๋ค.
7๊ฐ์ ์ข์์
vo(value object)์ ์ ํฉํ์ฃ