C#

    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μ—μ„œ 같은 μ–΄μ…ˆλΈ”λ¦¬λž€

    [쀑간점검] μ ‘κ·Όν•œμ •μž internalμ—μ„œ 같은 μ–΄μ…ˆλΈ”λ¦¬λž€

    μ–΄μ…ˆλΈ”λ¦¬ μ •μ˜ μ–΄μ…ˆλΈ”λ¦¬ μ •μ˜ 및 μ–΄μ…ˆλΈ”λ¦¬ λ ˆνΌλŸ°μŠ€λŠ” 슀크립트λ₯Ό μ–΄μ…ˆλΈ”λ¦¬λ‘œ ꡬ성할 수 μžˆλŠ” μ—μ…‹μž…λ‹ˆλ‹€. μ–΄μ…ˆλΈ”λ¦¬λŠ” μŠ€ν¬λ¦½νŠΈμ— μ˜ν•΄ μ •μ˜λ˜κ³  λ‹€λ₯Έ μ–΄μ…ˆλΈ”λ¦¬μ— λŒ€ν•œ λ ˆνΌλŸ°μŠ€λ„ μ •μ˜ν•˜λŠ” 컴파일된 ν΄λž˜μŠ€μ™€ ꡬ쑰체가 λ“€μ–΄ μžˆλŠ” C# μ½”λ“œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. C#의 μ–΄μ…ˆλΈ”λ¦¬μ— λŒ€ν•œ 일반적인 μ •λ³΄λŠ” [.NET의 μ–΄μ…ˆλΈ”λ¦¬]λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. 기본적으둜 UnityλŠ” 거의 λͺ¨λ“  κ²Œμž„ 슀크립트λ₯Ό 사전 μ •μ˜λœ μ–΄μ…ˆλΈ”λ¦¬μΈ Assembly-CSharp.dll둜 μ»΄νŒŒμΌν•©λ‹ˆλ‹€. (λ˜ν•œ UnityλŠ” [λͺ‡ κ°€μ§€ 더 μž‘κ³  μ „λ¬Έν™”λœ 사전 μ •μ˜ μ–΄μ…ˆλΈ”λ¦¬]도 μƒμ„±ν•©λ‹ˆλ‹€.) 이 배열은 μ†Œκ·œλͺ¨ ν”„λ‘œμ νŠΈμ— μ ν•©ν•˜μ§€λ§Œ, ν”„λ‘œμ νŠΈμ— μ½”λ“œλ₯Ό 더 μΆ”κ°€ν•  경우 λͺ‡ κ°€μ§€ 단점이 μžˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ˜ 슀크립트λ₯Ό λ³€κ²½ν•  λ•Œλ§ˆλ‹€ UnityλŠ” λ‹€λ₯Έ λͺ¨λ“  슀크립트λ₯Ό λ‹€μ‹œ 컴파..

    23. 상속, μ½”λ“œ μž¬ν™œμš©, 기반 클래슀, νŒŒμƒ 클래슀, base, sealed

    ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ ν΄λž˜μŠ€λ‘œλΆ€ν„° μœ μ‚°μ„ 물렀받을 수 μžˆλ‹€.(ν•„λ“œ, λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹° 같은 멀버듀) νŒŒμƒ ν΄λž˜μŠ€λŠ” 객체λ₯Ό 생성할 λ•Œ λ‚΄λΆ€μ μœΌλ‘œ 기반 클래슀의 μƒμ„±μžλ₯Ό λ¨Όμ € ν˜ΈμΆœν•œ 뒀에 μžμ‹ μ˜ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜κ³ , 객체가 μ†Œλ©Έλ  λ•ŒλŠ” λ°˜λŒ€μ˜ μˆœμ„œλ‘œ(νŒŒμƒν΄λž˜μŠ€ -> 기반 클래슀)μ’…λ£Œμžλ₯Ό ν˜ΈμΆœν•œλ‹€. : 기반 클래슀 λ¨Όμ € μƒμ„±λ˜κ³  λ§ˆμ§€λ§‰κΉŒμ§€ 버티닀 κ°€μž₯ λ‚˜μ€‘μ— μ’…λ£Œμž ν˜ΈμΆœν•¨! λ§Œμ•½ 기반 클래슀의 μƒμ„±μžκ°€ λ§€κ°œλ³€μˆ˜λ₯Ό μž…λ ₯받도둝 μ„ μ–Έλ˜μ–΄ μžˆλ‹€λ©΄ νŒŒμƒ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ ν˜ΈμΆœλ˜λŠ” 기반 클래슀의 μƒμ„±μžμ—λŠ” μ–΄λ–»κ²Œ λ§€κ°œλ³€μˆ˜λ₯Ό 전달할 수 μžˆμ„κΉŒ. 이럴 λ•Œ base ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. this ν‚€μ›Œλ“œκ°€ "자기 μžμ‹ "을 가리킨닀면 baseλŠ” "기반 클래슀"λ₯Ό 가리킨닀. thisλ₯Ό 톡해 자기 μžμ‹ μ˜ 멀버에 μ ‘κ·Όν•  수 있..

    22. 은닉성, μ ‘κ·Ό ν•œμ •μž

    객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° 3λŒ€ νŠΉμ„± : 은닉성, 상속성, λ‹€ν˜•μ„± 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—λŠ” 클래슀의 μ‚¬μš©μžμ—κ²Œ ν•„μš”ν•œ μ΅œμ†Œμ˜ κΈ°λŠ₯만 λ…ΈμΆœν•˜κ³  λ‚΄λΆ€λ₯Ό 감좜 것을 μš”κ΅¬ν•œλ‹€. 이것을 은닉성이라고 ν•œλ‹€. ν΄λž˜μŠ€μ— μ„ μ–Έλ˜μ–΄ μžˆλŠ” ν•„λ“œμ™€ λ©”μ†Œλ“œ 쀑 μ–΄λ–€ 것듀은 μ‚¬μš©μžμ—κ²Œ λ…ΈμΆœν•  것이 μžˆλŠ”κ°€ ν•˜λ©΄ μ ˆλŒ€λ‘œ λ…ΈμΆœμ‹œν‚€μ§€ 말아야 ν•˜λŠ” 것듀도 μžˆλ‹€. μ ‘κ·Ό ν•œμ •μžλŠ” 감좔고 싢은 것은 감좔고, 보여주고 싢은 것은 보여쀄 수 μžˆλ„λ‘ μ½”λ“œλ₯Ό μˆ˜μ‹ν•˜λ©° ν•„λ“œ, λ©”μ†Œλ“œλ₯Ό λΉ„λ‘―ν•΄ ν”„λ‘œνΌν‹° λ“± λͺ¨λ“  μš”μ†Œμ— λŒ€ν•΄ μ‚¬μš©ν•  수 μžˆλ‹€. C#μ—μ„œ μ œκ³΅ν•˜λŠ” μ ‘κ·Ό ν•œμ •μžλŠ” λͺ¨λ‘ μ—¬μ„―κ°€μ§€λ‘œ, λ‹€μŒκ³Ό κ°™λ‹€. μ ‘κ·Ό ν•œμ •μž μ„€λͺ… public 클래슀 λ‚΄λΆ€/μ™ΈλΆ€ λͺ¨λ“  κ³³μ—μ„œ μ ‘κ·Όν•  수 μžˆλ‹€. protected 클래슀의 μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†μ§€λ§Œ, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œλŠ” μ ‘κ·Ό..