๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ
31. ๊ตฌ์กฐ์ฒด, ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ ๊ตฌ์กฐ์ฒด(readonly struct)
C# ๋ณตํฉ ๋ฐ์ดํฐ ํ์์๋ ํด๋์ค ๋ง๊ณ ๋ ๊ตฌ์กฐ์ฒด๋ผ๋ ๊ฒ์ด ์๋ค. ๊ตฌ์กฐ์ฒด๋ ํด๋์ค์ ์ฌ์ด์ง๊ฐ์ฏค ๋๊ธฐ ๋๋ฌธ์ ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋ ๋ฑ ์๋น ๋ถ๋ถ ๋น์ทํ๋ค. struct ๊ตฌ์กฐ์ฒด์ด๋ฆ { //ํ๋ //๊ตฌ์กฐ์ฒด } ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ธํ๋ ์ struct MyStruct { public int MyField1 public int MtField2 public void MyMethod() { //... } } ๊ตฌ์กฐ์ฒด์ ํ๋๋ฅผ public์ผ๋ก ์ ์ธํ๋ค. ํด๋์ค์์๋ ์๋์ฑ๋๋ฌธ์ ๋ชจ๋ ํ๋๋ฅผ ๋ฐ๋์ private๋ก ์์ฑํ์๋ค. ๋ฌธ๋ฒ์ ์ผ๋ก๋ ๊ตฌ์กฐ์ฒด๊ฐ ํด๋์ค์ ์ ์ฌํ๊ธฐ๋ ํด๋, ์กด์ฌ ์ด์ ๊ฐ ๋ค๋ฅด๋ค. ํด๋์ค๋ ์ค์ธ๊ณ์ ๊ฐ์ฒด๋ฅผ ์ถ์ํํ๋ ค๋๋ฐ ๊ทธ ์กด์ฌ์ ์ด์ ๊ฐ ์์ง๋ง ๊ตฌ์กฐ์ฒด๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๋ก ์ฌ์ฉ๋๋ค. (๋ฐ๋ผ์ ๊ตณ์ด..
30. ํ์ฅ ๋ฉ์๋
ํ์ฅ ๋ฉ์๋๋ ๊ธฐ์กด ํด๋์ค์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ๊ธฐ๋ฒ์ด๋ค. ๊ธฐ๋ฐ ํด๋์ค๋ฅผ ๋ฌผ๋ ค๋ฐ์ ํ์ ํด๋์ค๋ฅผ ๋ง๋ ๋ค ์ฌ๊ธฐ์ ํ๋๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ์์๊ณผ๋ ๋ค๋ฅด๋ค. ํ์ฅ๋ฉ์๋๋ '๊ธฐ์กด ํด๋์ค'์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ค. ํ์ฅ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด string ํด๋์ค์ ๋ฌธ์์ด์ ๋ค์ง๋ ๊ธฐ๋ฅ์ ๋ฃ์ ์๋ ์๊ณ , int ํ์์ ์ ๊ณฑ ์ฐ์ฐ ๊ธฐ๋ฅ์ ๋ฃ์ ์๋ ์๋ค. using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Console; using MyExt..
29. ๋ถํ ํด๋์ค
๋ถํ ํด๋์ค๋ ์ฌ๋ฌ ๋ฒ์ ๋๋ ์ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ๋งํ๋ค. ๊ทธ ์์ฒด๋ก ํน๋ณํ ๊ธฐ๋ฅ์ ํ๋ ๊ฒ์ ์๋๋ฉฐ, ํด๋์ค์ ๊ตฌํ์ด ๊ธธ์ด์ง ๊ฒฝ์ฐ ์ฌ๋ฌ ํ์ผ์ ๋๋ ์ ๊ตฌํํ ์ ์๊ฒ ํจ์ผ๋ก์จ ์์ค ์ฝ๋ ๊ด๋ฆฌ์ ํธ์๋ฅผ ์ ๊ณตํ๋๋ฐ ๊ทธ ์๋ฏธ๊ฐ ์๋ค. ๊ทธ๋ฅ ํ๋์ ํด๋์ค์ธ ๊ฒ ์ฒ๋ผ ์ฌ์ฉํ๋ฉด ๋๋ค. (ํด๋์ค ์ด๋ฆ์ ๋์ผํด์ผ ํ๋ค.) using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Console; namespace PartialClass { ..
28. ์ค์ฒฉ ํด๋์ค
์ค์ฒฉ ํด๋์ค๋ ํด๋์ค ์์ ์ ์ธ๋์ด ์๋ ํด๋์ค์ด๋ค. ํด๋์ค ์์ ํด๋์ค๋ฅผ ์ ์ธํ๋ ๊ฒ์ด ์ ๋ถ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ๋ ๋ณดํต ํด๋์ค์ ๋๊ฐ๋ค. ์ค์ฒฉํด๋์ค๋ ์์ ์ด ์์๋ ํด๋์ค์ ๋ฉค๋ฒ์ ์์ ๋กญ๊ฒ ์ ๊ทผํ ์ ์๋ค.(private ๋ฉค๋ฒ๋!) ์ค์ฒฉํด๋์ค๋ฅผ ์ฐ๋ ์ด์ - ํด๋์ค ์ธ๋ถ์ ๊ณต๊ฐํ๊ณ ์ถ์ง ์์ ํ์์ ๋ง๋ค๊ณ ์ ํ ๋ - ํ์ฌ ํด๋์ค์ ์ผ๋ถ๋ถ์ฒ๋ผ ํํํ ์ ์๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ ํ ๋ ๋ค๋ฅธ ํด๋์ค์ private ๋ฉค๋ฒ์๋ ๋ง๊ตฌ ์ ๊ทผํ ์ ์๋ ์ค์ฒฉ ํด๋์ค๋ ์๋์ฑ์ ๋ฌด๋๋จ๋ฆฌ๊ธฐ๋ ํ์ง๋ง, ๋ณด๋ค ์ ์ฐํ ํํ๋ ฅ์ ํ๋ก๊ทธ๋๋จธ์๊ฒ ๊ฐ์ ธ๋ค์ค๋ค๋ ์ฅ์ ์ด ์๋ค. class OuterClass { private int OuterMember; class NestedClass { publi..
27. ์ฝ๊ธฐ ์ ์ฉ ํ๋, readonly
๋ณ์๋ ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ง๋ง, ์์๋ ๋ณ์น ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋๋ค. ์์๋ const ํค์๋๋ฅผ ์ด์ฉํด์ ์ ์ธํ๋ค. ์ปดํ์ผ๋ฌ๋ ์์์ ์ง์ ๋ ๊ฐ์ ์คํํ์ผ ์์ ๊ธฐ๋กํด๋๋ค. ์์๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ ์ ๋ถํฐ ์ด๋ฏธ ์ ํด์ ธ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก๊ทธ๋จ ์คํ ์ค์๋ ์ ๋ ๊ทธ ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค. ๋ณ์๋ ์์ ๋กญ๊ฒ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค. ์ฝ๊ธฐ ์ ์ฉ ํ๋๋ ์์์ ๋ณ์ ๊ทธ ์ค๊ฐ ์ด๋๊ฐ์ ์๋ค. ์ฝ๊ธฐ ์ ์ฉ ํ๋๋, ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ ํ๋๋ฅผ ๋งํ๋ค. ์ฆ, ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์ ๋ฉค๋ฒ๋ก๋ง ์กด์ฌํ ์ ์์ผ๋ฉฐ ์์ฑ์ ์์์ ํ ๋ฒ ๊ฐ์ ์ง์ ํ๋ฉด, ๊ทธ ํ๋ก๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ด ํน์ง์ด๋ค. ์ปดํ์ผ ์๋ฌ : ์ค๋ฅ CS0191 ์ฝ๊ธฐ ์ ์ฉ ํ๋์๋ ํ ๋นํ ์ ์์ต๋๋ค. ๋จ, ํ๋๊ฐ ์ ์๋ ํ์์ ์์ฑ์ ๋๋ ์ด๊ธฐ๊ฐ ์ ์ฉ setter๋ ๋ณ์ ..
26. ์ค๋ฒ๋ผ์ด๋ฉ ๋ด์ธํ๊ธฐ
ํด๋์ค๋ฅผ ์์์ด ์ ๋๋๋ก ๋ด์ธํ๋ ๊ฒ์ฒ๋ผ ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ฉ๋์ง ์๋๋ก sealed ํค์๋๋ฅผ ์ด์ฉํด์ ๋ด์ธํ ์ ์๋ค. ๊ทธ๋ ๋ค๊ณ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๋ด์ธํ ์ ์๋ ๊ฒ์ ์๋๊ณ , virtual๋ก ์ ์ธ๋ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ ๋ฒ์ ์ ๋ฉ์๋๋ง ๊ฐ๋ฅํ๋ค. using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Console; namespace Overriding { class Base { public virtual void My..
25. ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ๋คํ์ฑ virtual, override
์์ฝ: ๋คํ์ฑ์ด๋ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ํํ๋ฅผ ๊ฐ์ง ์ ์์์ ์๋ฏธํ๋ค. ๋คํ์ฑ์ ์๋ ํ์ ํ์ ๋คํ์ฑ์ ์ค๋ง์ด๋ค. ์์ ์ผ๋ก๋ถํฐ ์์๋ฐ์ ๋ง๋ค์ด์ง ํ์ํด๋์ค๋ฅผ ํตํด ๋คํ์ฑ์ ์คํํ๋ค. ์ค๋ฒ๋ผ์ด๋ฉ์ ํ์ํด๋์ค๊ฐ ๊ธฐ๋ฐํด๋์ค์์ ๊ตฌํ๋ ํจ์๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ์ด๋ค. ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด ๋คํ์ฑ์ด ์คํ๋๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๋คํ์ฑ์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ํํ๋ฅผ ๊ฐ์ง ์ ์์์ ์๋ฏธํ๋ค. ๋คํ์ฑ์ ์๋ ํ์ ํ์ ๋คํ์ฑ์ ์ค๋ง์ด๋ค. ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๊ธฐ ์ํด์๋ ํ ๊ฐ์ง ์กฐ๊ฑด์ด ํ์ํ๋ค. ๊ทธ ์กฐ๊ฑด์ ๋ฐ๋ก ์ค๋ฒ๋ผ์ด๋ฉ์ ํ ๋ฉ์๋๊ฐ virtual ํค์๋๋ก ํ์ ๋์ด ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ค๋ฒ๋ผ์ด๋ฉ์ ํ๋ ์ธก์์๋ ๊ธฐ๋ฐ ํด๋์ค์ ์ ์ธ๋์ด ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๊ณ ์์์ ์ปดํ์ผ๋ฌ์ ์๋ ค์ผ ํ๋ฏ๋ก override๋ก ํ์ ํด์ฃผ์ด์ผ ํ๋ค. ..
24. C# ํ์ ๋ณํ ์ฐ์ฐ์ ์ํ ์ฐ์ฐ์, is์ as
์ฐ์ฐ์ ์ค๋ช is ๊ฐ์ฒด๊ฐ ํด๋น ํ์์ ํด๋นํ๋์ง ๊ฒ์ฌํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ bool ๊ฐ์ผ๋ก ๋ฐํํ๋ค (๊ฐ์ฒด(ํ์ ๊ฐ๋ฆฌํค๋ ๋ณ์)๊ฐ ์ฐพ๊ณ ์๋ ์์ฑ์ ํ์์ ๊ฐ๋ฆฌํค๋๊ฒ ๋ง๋์ง๋ฅผ ํ์ธ!!! ๋ค๋ฅธ ์์ฑ์ ํ์์ ๊ฐ๋ฆฌํฌ ์๋ ์์ผ๋๊น) as ์บ์คํธ. ๋ง๊ทธ๋๋ก ํ์ ๋ณํ! ํ์ ๋ณํ ์ฐ์ฐ์์ ๊ฐ์ ์ญํ ์ ํ๋ค. (์๋ฌด๋ฆฌ ์์ฑ์ ํ์์ ๊ฐ๋ฅดํฌ์ง ์ธ์ ์๋ฒฝํ๊ฒ ํ๋ณํํ๊ธฐ ์ํด์๋ ๋ณ์ ์์ฒด๋ ๊ทธ ์ ์ธ์ ๊ฐ์ ํ์ผ๋ก ์ง์ ํด์ฃผ์ด์ผ ํ๋ค.) ๋ค๋ง ํ์ ๋ณํ ์ฐ์ฐ์๊ฐ ๋ณํ์ ์คํจํ๋ ๊ฒฝ์ฐ ์์ธ๋ฅผ ๋์ง๋ ๋ฐ๋ฉด์ as ์ฐ์ฐ์๋ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ null๋ก ๋ง๋ ๋ค๋ ๊ฒ์ด ๋ค๋ฅด๋ค. as ์ฌ์ฉ ๋ฐฉ๋ฒ Mammal mammal3 = new Cat(); if (mammal3 is Cat) { Cat cat2 = mammal3 as Cat; cat2...
[์ค๊ฐ์ ๊ฒ] ์ ๊ทผํ์ ์ internal์์ ๊ฐ์ ์ด์ ๋ธ๋ฆฌ๋
์ด์ ๋ธ๋ฆฌ ์ ์ ์ด์ ๋ธ๋ฆฌ ์ ์ ๋ฐ ์ด์ ๋ธ๋ฆฌ ๋ ํผ๋ฐ์ค๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ ๋ธ๋ฆฌ๋ก ๊ตฌ์ฑํ ์ ์๋ ์์ ์ ๋๋ค. ์ด์ ๋ธ๋ฆฌ๋ ์คํฌ๋ฆฝํธ์ ์ํด ์ ์๋๊ณ ๋ค๋ฅธ ์ด์ ๋ธ๋ฆฌ์ ๋ํ ๋ ํผ๋ฐ์ค๋ ์ ์ํ๋ ์ปดํ์ผ๋ ํด๋์ค์ ๊ตฌ์กฐ์ฒด๊ฐ ๋ค์ด ์๋ C# ์ฝ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. C#์ ์ด์ ๋ธ๋ฆฌ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ ๋ณด๋ [.NET์ ์ด์ ๋ธ๋ฆฌ]๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ๊ธฐ๋ณธ์ ์ผ๋ก Unity๋ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ ์ ์๋ ์ด์ ๋ธ๋ฆฌ์ธ Assembly-CSharp.dll๋ก ์ปดํ์ผํฉ๋๋ค. (๋ํ Unity๋ [๋ช ๊ฐ์ง ๋ ์๊ณ ์ ๋ฌธํ๋ ์ฌ์ ์ ์ ์ด์ ๋ธ๋ฆฌ]๋ ์์ฑํฉ๋๋ค.) ์ด ๋ฐฐ์ด์ ์๊ท๋ชจ ํ๋ก์ ํธ์ ์ ํฉํ์ง๋ง, ํ๋ก์ ํธ์ ์ฝ๋๋ฅผ ๋ ์ถ๊ฐํ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค. ํ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๊ฒฝํ ๋๋ง๋ค Unity๋ ๋ค๋ฅธ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ์ปดํ..
23. ์์, ์ฝ๋ ์ฌํ์ฉ, ๊ธฐ๋ฐ ํด๋์ค, ํ์ ํด๋์ค, base, sealed
ํด๋์ค๋ ๋ค๋ฅธ ํด๋์ค๋ก๋ถํฐ ์ ์ฐ์ ๋ฌผ๋ ค๋ฐ์ ์ ์๋ค.(ํ๋, ๋ฉ์๋, ํ๋กํผํฐ ๊ฐ์ ๋ฉค๋ฒ๋ค) ํ์ ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ๋ด๋ถ์ ์ผ๋ก ๊ธฐ๋ฐ ํด๋์ค์ ์์ฑ์๋ฅผ ๋จผ์ ํธ์ถํ ๋ค์ ์์ ์ ์์ฑ์๋ฅผ ํธ์ถํ๊ณ , ๊ฐ์ฒด๊ฐ ์๋ฉธ๋ ๋๋ ๋ฐ๋์ ์์๋ก(ํ์ํด๋์ค -> ๊ธฐ๋ฐ ํด๋์ค)์ข ๋ฃ์๋ฅผ ํธ์ถํ๋ค. : ๊ธฐ๋ฐ ํด๋์ค ๋จผ์ ์์ฑ๋๊ณ ๋ง์ง๋ง๊น์ง ๋ฒํฐ๋ค ๊ฐ์ฅ ๋์ค์ ์ข ๋ฃ์ ํธ์ถํจ! ๋ง์ฝ ๊ธฐ๋ฐ ํด๋์ค์ ์์ฑ์๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ก ์ ์ธ๋์ด ์๋ค๋ฉด ํ์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ํธ์ถ๋๋ ๊ธฐ๋ฐ ํด๋์ค์ ์์ฑ์์๋ ์ด๋ป๊ฒ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ ์ ์์๊น. ์ด๋ด ๋ base ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. this ํค์๋๊ฐ "์๊ธฐ ์์ "์ ๊ฐ๋ฆฌํจ๋ค๋ฉด base๋ "๊ธฐ๋ฐ ํด๋์ค"๋ฅผ ๊ฐ๋ฆฌํจ๋ค. this๋ฅผ ํตํด ์๊ธฐ ์์ ์ ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์..