์ปฌ๋ ์ ๊ณผ ์ ๋ค๋ฆญ์ ํผ๋ํ๋ ๊ฒ์ ํํ๋ฐ, ๋์ ์๋ก ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค. ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์๋๊ณ , ํจ์จ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ด ์๋ฃ๊ตฌ์กฐ๋ค์ ๋ฐฐ์ด ๋ฆฌ์คํธ, ํด์, ๋งต, ์คํ, ํ ๋ฑ ๋ค์ํ ํํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ ๋ค๋ฆญ์ ํ์ ์ ๋์ ์ผ๋ก ์ง์ ํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ ๊ธฐ๋ฅ์ด๋ค. ๋ฐ์ดํฐ์ ํ์ ์ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋ช ํํ์ง ์์ ์ ์์ผ๋, ์ปดํ์ผ๋ฌ๊ฐ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ๊ฒฐ์ ๋๋ค. ์ด๋ฅผ ํ ๋ฉด, ์ ๋ค๋ฆญ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋ ์ปฌ๋ ์ ์ ๋ง๋ค ์ ์๋ค. ์ด๋ฐ ์์ผ๋ก ์ ๋ค๋ฆญ์ ํตํด ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์์ ์ฑ์ ๋์ผ ์ ์๋ค. ๋ฌผ๋ฆฌ์ ์ผ๋ก๋ ๊ตฌ์ฒดํ๋์ง ์์ง๋ง, ๋ ผ๋ฆฌ์ ์ผ๋ก๋ ํ์ ์ด ๊ฒฐ์ ๋์ด ์๋ค. ์ ๋ค๋ฆญ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ์ข ๋ฎ์ ์ ์์ผ๋ ํ์ ์์ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ ์ธก๋ฉด์์ ๋งค์ฐ ์ ์ฉํ๋ค. ์ ๋ค๋ฆญ์ ๋ํด ์ข ๋ ์์ธํ ์์๋ณด์.
์ผ๋ฐํ๋ ์ ๋ค๋ฆญ ํ๋ก๊ทธ๋๋ฐ - ํ์ ์ธ์์ ํ์ฉ
ํ์ ์ธ์๋ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ์ฌ ์ผ๋ฐํ๋ ํด๋์ค๋ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๊ธฐ๋ฒ์ด๋ค. ์ด๋ ๋ด๋ถ ๊ตฌ์กฐ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋์ผํ๋ ๋ค์ํ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ ์ฉํ๋ค. C++์ ํ ํ๋ฆฟ๊ณผ ๊ฐ๋ ์ ์ผ๋ก ์ ์ฌํ๋ค. ์ ๋ค๋ฆญ์ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ํ์ ์ ์์ ์ฑ์ ๋์ผ ์ ์๋ค. ๋จ์ ์ผ๋ก๋ ํ๋ก๊ทธ๋จ์ด ์ปค์ง๊ณ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง์ ์๋ค.
์ ๋ค๋ฆญ์ ํ์์ฑ
์ ๋ค๋ฆญ์ C#์์ ์ ํ์ํ์ง ์ดํด๋ณด์. ์ด ์ฝ๋์์๋ intํ์ ๊ณผ stringํ์ ์ ๊ฐ๊ฐ ๋ํํ WraperInt์ WraperStringํด๋์ค๊ฐ ์๋ค. ์ด๋ฌํ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋ํํ๊ณ , ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ํ ๋๋ get๊ณผ set ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ฐฉ์์ ํ์ ๋ง๋ค ์ค๋ณต๋ ์ฝ๋๋ฅผ ์์ฑํด์ผํ๋ฏ๋ก ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ด ๋จ์ด์ง๋ค.
class WrapperInt
{
private int value;
public WrapperInt() { value = 0; }
public WrapperInt(int aValue)
{
value = aValue;
}
public int getValue()
{
return value;
}
public void setValue(int aValue)
{
value = aValue;
}
public void OutputValue()
{
Console.WriteLine(value);
}
}
class WrapperString
{
private string value;
public WrapperString() { value = null;}
}
์ด๋ฌํ ์ํฉ์์ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ํ์ ์ ๋์ ์ผ๋ก ์ง์ ํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค. ์๋ฅผ ๋ค์ด Wapper ํด๋์ค๋ฅผ ์ ๋ค๋ฆญ์ผ๋ก ๋ง๋ค๋ฉด ๋ค์ํ ํ์ ์ ๋ํด ๋์ผํ ๋ํ ๊ธฐ๋ฅ์ ์ ๊ณต ํ ์ ์๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ค๋ณต๋ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๊ณ , ํ์ ๋ณ๋ก ํด๋์ค๋ฅผ ์์ฑํ ํ์๊ฐ ์์ด์ง๋ค. ๋ฐ๋ผ์ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค.
int ํ์์ ์์คํ ๋ฉ์๋ getHashCode
C# ์์๋ ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค๋ฅผ ์ ์ํ ๋ get๊ณผ set ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋กํผํฐ๋ฅผ ์ ์ํ๋ค.์ด ํ๋กํผํฐ๋ ํด๋น ํด๋์ค์ ์ธ์คํด์ค ๋ณ์์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ํ๋๋ฐ ์ฌ์ฉ๋๋ค.๊ทธ๋ฌ๋ ์ผ๋ถ ๋ด์ฅ๋ ํด๋์ค์๋ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ ๋ด๋ถ ๋ฐ์ดํฐ๋ ๋์์ ์ง์ํ๊ธฐ ์ํด ํน์ ๋ฉ์๋๋ค์ด ๋ด์ฅ๋์ด ์๋ค.
์๋ฅผ ๋ค์ด, int ์ ๊ฐ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ์ ๋ํด์๋ ,NET ํ๋ ์์ํฌ์ ์ผ๋ถ๋ก ์ ๊ณต๋๋ ๋ด์ฅ๋ ๋ฉ์๋๊ฐ ์๋ค. ๊ทธ ์ค ํ๋๊ฐ getHashCode๋ฉ์๋์ด๋ค. ์ด ๋ฉ์๋๋ ๊ฐ์ฒด์ ํด์ ์ฝ๋๋ฅผ ๋ฐํํ๋๋ฐ, ์ฌ์ฉ๋๋ค. ํด์ ์ฝ๋๋ ๊ฐ์ฒด์ ๊ณ ์ ํ ์๋ณ์๋ก ์ฌ์ฉ๋๊ณ , ํด์ ํ ์ด๋ธ๊ณผ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ์์ ๊ฐ์ฒด๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๋ฐ๋ผ์ ๋ด์ฅ๋ ์ฝ๋์์ getHashCode ๋ฉ์๋๋ ํด๋น ๊ฐ์ฒด์ ํด์ ์ฝ๋๋ฅผ ๋ฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด๊ฑด ํ๋กํผํฐ๊ฐ ์๋๋ผ ๋ฉ์๋์ด๊ณ , ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ ํธ์ถํ๊ธฐ๋ณด๋ค๋ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
ํ๋กํผํฐ์๋ ์ฝ๊ฐ ๋ค๋ฅธ ๊ฐ๋ ์ด์ง๋ง, ๊ฐ์ฒด์ ์ํ๋ฅผ ์๋ณํ๊ธฐ ์ํด ํ์ํ ์ค์ํ ๋์์ด๋ค.
ํ๋กํผํฐ ํ์ฉ - get๊ณผ set ํจ์์ ๊ฐ์ํ
C#์์๋ ํ๋กํผํฐ๋ผ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ get๊ณผ set ํจ์๋ฅผ ๊ฐ์ํํ ์ ์๋ค. ์ด์ ์๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ณ ์ค์ ํ๊ธฐ ์ํด ๋ช ์์ ์ผ๋ก getValue()์ setValue() ๋ฉ์๋๋ฅผ ์์ฑํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฅผ ํ๋์ ํต์ผ๋ก ๋ฌถ์ด์ ํํํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ด ์์ฑ๋ ์ฝ๋๋ ๊ธฐ์กด์ getValue()์ setValue() ๋ฉ์๋๋ฅผ ๋์ฒดํ๋ค.
public int Data
{
get { return this.value; }
set { this.value = value; }
}
์ด๋ ๊ฒ ํ๋ฉด Data๋ผ๋ ํ๋กํผํฐ๋ฅผ ํตํด ๊ฐ์ ๊ฐ์ ธ์ค๊ณ ์ค์ ํ ์ ์๋ค. ๊ธฐ๋ฅ์ ์ผ๋ก ์ด์ ์ get๊ณผ setํจ์์ ๋์ผํ๊ณ , ์ฝ๋๋ฅผ ๊ฐ์ํธํ๊ณ ๊ฐ๋ ์ฑ์ ๋์ผ์ ์๋ค. ๋ฐ๋ผ์ ํ๋กํผํฐ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฝ๋ ์์ฑ์ด ๋ ํจ์จ์ ์ด๊ณ ์ง๊ด์ ์ผ์ ์๋ค.
์ ๋ค๋ฆญ์ ํ์ฉํ Wrapper ํด๋์ค
WrapperInt์ WrapperString์ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ง ๋ฐ์ดํฐ์ ํ์ ๋ง ๋ค๋ฅธ ํด๋์ค์ด๋ค. ์ด๋ฐ ๋น์ทํ ๊ธฐ๋ฅ์ ๊ฐ๊ฐ ์ ์ํ๋ ๊ฒ์ ๋นํจ์จ์ ์ผ๋ก ๋ณด์ธ๋ค. ๋์ ์ Wrapper๋ผ๋ ์ด๋ฆ์ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ํ์ ์ ์ ํ์ง ์๊ณ , ์ ๋ค๋ฆญ์ผ๋ก ๋ง๋ค์ ์๋ค.
class Wrapper<T>
{
private T value;
public Wrapper() { value = default(T); }
public Wrapper(T aValue)
{
value = aValue;
}
public T getValue()
{
return value;
}
public void setValue(T aValue)
{
value = aValue;
}
public void OutputValue()
{
Console.WriteLine(value);
}
}
์ด๋ ๊ฒ ํ๋ฉด Wrapper ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ํํ ์ ์๋ค. Wrapper<int>๋ฅผ ์ฌ์ฉํ๋ฉด int ํ์ ์ ๋ฐ์ดํฐ๋ฅผ, Wrapper<string>์ ์ฌ์ฉํ๋ฉด string ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ์ ์๋ค. ์ด๋ ๊ฒ ๋์ ์ผ๋ก ํ์ ์ ๋ฐ์๋ค์ด๋ ๊ฒ์ด ์ ๋ค๋ฆญ์ ํต์ฌ์ด๋ค.
์ ๋ค๋ฆญ ์ปฌ๋ ์ ์ ํ์์ฑ
์ ๋ค๋ฆญ ์ปฌ๋ ์ ์ ์ปฌ๋ ์ ์ ์ผ๋ฐํํ ๊ฒ์ผ๋ก ์ผ๋ฐ ์ปฌ๋ ์ ์ ์์๋ object ํ์ ์ด์ด์ ์์์ ์์๋ฅผ ์ ์ฅํ ์์๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ช๊ฐ์ง ๋ถํธํ์ ์ ๊ฐ์ง๊ณ ์๋ค. ์๋ฅผ ๋ค์ด, ์ปฌ๋ ์ ์ ์ฝ์๋๋ ์ํ๋ ํ์ ์ผ๋ก ์บ์คํ ์ ํด์ผ ํ๊ณ , ์๋ชป๋ ์บ์คํ ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ์ ์๋ค. ๋ํ ๊ฐ ํ์ ์ ์ ์ฅํ ๋๋ object ํ์ ์ผ๋ก ๋ณํํ๋ ๋ฐ์ฑ(boxing)์ด ํ์ํ๊ณ , ๊ฐ์ ๊ฐ์ ธ์ฌ ๋๋ ์ธ๋ฐ์ฑ(unboxing)์ด ํ์ํ๋ค.
์ด๋ ๊ฒ ์ผ๋ฐ์ ์ธ ์ปฌ๋ ์ ์ ๋๋ฌด ์ผ๋ฐ์ ์ด์ด์ ์๋ชป๋ ์ฝ๋๋ฅผ ์ฐพ์๋ด๋ ๋ฐ์๋ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ๋ชปํ๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๋ค๋ฆญ ์ปฌ๋ ์ ์ด ์ ๊ณต๋๋ค. ์ ๋ค๋ฆญ ์ปฌ๋ ์ ์ ์ปฌ๋ ์ ์ ์์ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ฌ ํ์ ์์ ์ฑ์ ๋ณด์ฅํ๋ค. ์๋ฅผ ๋ค์ด, ArrayList์ ์ ๋ค๋ฆญ ๋ฒ์ ์ List<T>์ด๋ค.
๋ฐ์ฑ/์ธ๋ฐ์ฑ์ ํ๊ณ
๋ฐ์ฑ๊ณผ ์ธ๋ฐ์ฑ์ ํ๋ฐฐ์์ ๋ฌผ๊ฑด์ ๋ณด๋ด๊ณ ๋ฐ๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค. ๋ณด๋ด๋ ์ชฝ์์๋ ๋ฌผ๊ฑด์ ๋ฐ์ค์ ๋ด์์(object ํ์ ์ผ๋ก ๋งคํํ์ฌ) ๋ณด๋ด์ง๋ง ๋ฐ๋ ์ชฝ์์๋ ๋ฐ์ค๋ฅผ ์ด์ด์(์ธ๋ฐ์ฑํ์ฌ) ์ค์ ๋ฌผ๊ฑด์ ๊บผ๋ธ๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์ปฌ๋ ์ ์ ์์๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๊ณ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ผ๋ฐ ์ปฌ๋ ์ ๊ณผ ์ ๋ค๋ฆญ ์ปฌ๋ ์ ์ ๋น๊ต
์ผ๋ฐ ์ปฌ๋ ์
์ผ๋ฐ ์ปฌ๋ ์ ์ธ ArrayList๋ฅผ ์ฌ์ฉํ ๋๋ ์์๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค ๋ฐ์ดํฐ์ ํ์ ์ ๋ช ์ํด์ผ ํ๋ค. ์ด๋ ๊ฐ ์์์ ํ์ ์ ์๊ณ ์์ด์ผ ํ๋ ๋ถํธํจ์ ๊ฐ์ง๊ณ ์๋ค.
static void Main(string[] args)
{
ArrayList ar = new ArrayList(10);
ar.Add(1);
ar.Add(2.34);
ar.Add("string");
int i = (int)ar[0];
double d = (double)ar[1];
string s = (string)ar[2];
Console.WriteLine("{0}, {1}, {2}",i,d,s); // ์ถ๋ ฅ: 1, 2.34, string
}
์ด๋ฌํ ๋ถํธํจ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๋ค๋ฆญ ์ปฌ๋ ์ ์ด ๋์๋ค. ์ ๋ค๋ฆญ ์ปฌ๋ ์ ์ ์ฌ์ฉํ๋ฉด List์ ๊ฐ์ ์ปฌ๋ ์ ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ArrayList์ ์ ๋ค๋ฆญ ๋ฒ์ ์ด๋ค. ์ ๋ค๋ฆญ ์ปฌ๋ ์ ์ ์ฌ์ฉํ ๋๋ ํ์ ์ ๋ช ์ํ์ฌ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ฐ์ ธ์ฌ ํ์๊ฐ ์๋ค.
์ ๋ค๋ฆญ ์ปฌ๋ ์
๋ฆฌ์คํธ๋ ์ ๋ค๋ฆญ ์ปฌ๋ ์ ์ผ๋ก, ํ์ ์ ๋์ ์ผ๋ก ์ง์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ฌธ์์ด๋ง ์ ์ฅํ๋ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ ๋๋ List<string>์ ์ฌ์ฉํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฆฌ์คํธ์๋ ๋ฌธ์์ด๋ง ์ ์ฅํ ์ ์๊ณ , ๋ค๋ฅธ ๋ฐ์ดํฐ๋ ํ์ฉํ์ง ์๋๋ค.
List<string> list = new List<string>();
list.Add("C#");
list.Add("ASP.NET");
list.Add("์ฌ๋ฐ๋ค.");
foreach (string item in list)
{
Console.WriteLine(item);
}
์ ์ฝ๋์์ ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ์ถ๋ ฅํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋ฌ๋ ๋ง์ฝ ์ ์๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ๋ค๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ ๊ฒ ์ ๋ค๋ฆญ ์ปฌ๋ ์ ์ ๋์ ์ผ๋ก ์ง์ ํ ํ์ ์ด์ธ์ ๋ค๋ฅธ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์๋๋ก ๋ณด์ฅํ๋ค.
'C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C#] ์์ ํ๊ณ ํจ์จ์ ์ธ ์ค๋ ๋ ์์ฑ ๋ฐ ์ข ๋ฃ ๋ฐฉ๋ฒ (1) | 2024.06.03 |
---|---|
[C#] ํ๋ก์ธ์ค์ ์ค๋ ๋์ ๊ฐ๋ - Main ์ค๋ ๋ ์ ๋ณด ์ถ๋ ฅํ๊ธฐ (1) | 2024.06.02 |
[C#] ๊ทธ๋ํฝ GDI+ ๊ฐ๋ ๊ณผ ๊ฐ๋จํ ๋ํ ๊ทธ๋ฆฌ๊ธฐ (0) | 2024.05.22 |
[C#] ์ฑ๊ธํค ํจํด ์ดํดํ๊ธฐ - C++, C# ๋น๊ต (1) | 2024.05.21 |
[C#] ์๋ฌต์ ํ์ ์ถ๋ก ๊ณผ ๋์ ํ์ - var์ dynamic ํ์ฉ (2) | 2024.05.15 |