전체 κΈ€

전체 κΈ€

    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...