μ μ κ°λ°μ κΈ°μ λ©΄μ : C# 01
π£οΈ C#μ μ£Όμ νΉμ§μ μ€λͺ ν΄μ£ΌμΈμ. C, C++κ³Ό μ΄λ»κ² λ€λ₯Έκ°μ?
C#μ κ°μ²΄μ§ν₯, κ°λ ₯ν νμ
μμ€ν
, μλ λ©λͺ¨λ¦¬ κ΄λ¦¬(κ°λΉμ§ 컬λ μ
), λ²μ κ΄λ¦¬ λ° λ³΄μ, νλ«νΌ λ
립μ±(μ£Όλ‘ .NET νκ²½) λ±μ νΉμ§μΌλ‘ νλ κ³ κΈ νλ‘κ·Έλλ° μΈμ΄μ
λλ€.
C++μ λΉν΄ λ μ격ν κ°μ²΄μ§ν₯ μμΉκ³Ό κ°λ ₯ν νμ
μμ μ±μ μ 곡νλ©°, Cμ λ¬λ¦¬ μ μ°¨μ νλ‘κ·Έλλ° λμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μ€μ μ λ‘λλ€.
λν μλ λ©λͺ¨λ¦¬ κ΄λ¦¬(κ°λΉμ§ 컬λ μ
)λ₯Ό μ 곡νμ¬, C++κ³Ό Cμ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬(μ: `new`, `delete`, `malloc`, `free`)μ ꡬλ³λ©λλ€.
C#μ λ§μ΄ν¬λ‘μννΈμ .NET νλ μμν¬μ λ°μ νκ² μ°κ΄λμ΄ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ λ€μν νλ«νΌμμ μ€νλ μ μλλ‘ μ€κ³λμμ΅λλ€. Cμ C++μ νλ«νΌμ λ μμ‘΄μ μ΄λ©°, νΉν C++λ ν¬λ‘μ€ νλ«νΌ κ°λ° μ μΆκ°μ μΈ λ
Έλ ₯μ΄ νμν©λλ€.
π£οΈ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μμΉμ 무μμ΄λ©°, C#μμ μ΄λ₯Ό μ΄λ»κ² ꡬννλμ?
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ κΈ°λ³Έ μμΉ: κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μ£Όμ μμΉμλ μΊ‘μν(Encapsulation), μμ(Inheritance), λ€νμ±(Polymorphism), κ·Έλ¦¬κ³ μΆμν(Abstraction)κ° ν¬ν¨λ©λλ€. μ΄λ€μ 볡μ‘ν μμ€ν
μ λ κ΄λ¦¬νκΈ° μ½κ³ μ μ°νλ©° νμ₯ κ°λ₯ν λ°©μμΌλ‘ μ€κ³νλ λ° λμμ μ€λλ€.
μΊ‘μν: C#μμ μΊ‘μνλ ν΄λμ€λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°μ λ©μλλ₯Ό ν λ¨μλ‘ λ¬Άλ κ²μ μλ―Έν©λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν° μλκ³Ό 보μμ κ°νν μ μμ΅λλ€.
μμ: C#μμ μμμ ν΄λμ€κ° λ€λ₯Έ ν΄λμ€μ μμ±κ³Ό λ©μλλ₯Ό λ¬Όλ €λ°μ μ μλλ‘ ν¨μΌλ‘μ¨, μ½λ μ¬μ¬μ©μ±κ³Ό νμ₯μ±μ ν₯μμν΅λλ€.
λ€νμ± λ° μΆμν: C#μμ λ€νμ±μ λ©μλ μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ ν΅ν΄ ꡬνλλ©°, μΈν°νμ΄μ€μ μΆμ ν΄λμ€λ₯Ό μ¬μ©ν μΆμνλ νλ‘κ·Έλ¨ μ€κ³λ₯Ό λ μΌλ°μ μ΄κ³ νμ₯ κ°λ₯νκ² λ§λλλ€.
π£οΈ C#μμ κ° νμ (Value Type)κ³Ό μ°Έμ‘° νμ (Reference Type)μ μ°¨μ΄μ μ 무μμΈκ°μ?
κ° νμ
(Value Type): C#μμ κ° νμ
μ λ°μ΄ν°κ° μ§μ λ³μμ μ μ₯λλ©°, μ£Όλ‘ μ€ν λ©λͺ¨λ¦¬μ ν λΉλ©λλ€. κ° νμ
μ κΈ°λ³Έ λ°μ΄ν° νμ
(int, float, bool λ±)κ³Ό ꡬ쑰체(struct)λ₯Ό ν¬ν¨νλ©°, λ³μλ₯Ό 볡μ¬ν λ λ°μ΄ν°μ μ€μ 볡μ¬λ³Έμ΄ μμ±λ©λλ€.
μ°Έμ‘° νμ
(Reference Type): μ°Έμ‘° νμ
μ λ°μ΄ν°κ° ν λ©λͺ¨λ¦¬μ μ μ₯λλ©°, λ³μλ λ°μ΄ν°μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ°Έμ‘°ν©λλ€. ν΄λμ€(class), λ°°μ΄, μΈν°νμ΄μ€, λΈλ¦¬κ²μ΄νΈλ μ°Έμ‘° νμ
μ
λλ€. λ³μλ₯Ό 볡μ¬ν λ λ©λͺ¨λ¦¬ μ£Όμμ 볡μ¬λ³Έμ΄ μμ±λλ―λ‘ μ¬λ¬ λ³μκ° λμΌν κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μμ΅λλ€.
λ©λͺ¨λ¦¬ κ΄λ¦¬: κ° νμ
μ μ€νμ ν λΉλμ΄ ν¨μ νΈμΆμ΄ λλλ©΄ μλμΌλ‘ μ 리λλ λ°λ©΄, μ°Έμ‘° νμ
μ νμ ν λΉλμ΄ κ°λΉμ§ 컬λ ν°μ μν΄ κ΄λ¦¬λ©λλ€.
μ±λ₯κ³Ό μ¬μ©: κ° νμ
μ μΌλ°μ μΌλ‘ μκ³ κ°λ¨ν λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ²λ¦¬ν λ μ¬μ©λλ©°, μ°Έμ‘° νμ
μ λ 볡μ‘ν λ°μ΄ν° ꡬ쑰μ κ°μ²΄ μ§ν₯ μ€κ³μ μ ν©ν©λλ€.
π£οΈ C#μ κ°λΉμ§ 컬λ μ (Garbage Collection) λ©μ»€λμ¦μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
κ°λΉμ§ 컬λ μ
μ μ: C#μμ κ°λΉμ§ 컬λ μ
(GC)μ .NET λ°νμμ μΌλΆλ‘, λ μ΄μ μ¬μ©λμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ μ°Ύμλ΄κ³ ν΄μ νλ νλ‘μΈμ€μ
λλ€. μ΄ λ©μ»€λμ¦μ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νκ³ , λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό κ°λ°μλ‘λΆν° μΆμνν©λλ€.
λμ λ°©μ: GCλ μ°Έμ‘°λμ§ μλ κ°μ²΄, μ¦ μ΄λ€ λ£¨νΈ μ°Έμ‘°(μ: μ μ λ³μ, μ€ν λ³μ)μμλ μ κ·Όν μ μλ κ°μ²΄λ₯Ό κ°λΉμ§λ‘ κ°μ£Όνκ³ , μ΄λ¬ν κ°μ²΄κ° μ¬μ©νλ λ©λͺ¨λ¦¬λ₯Ό νμν©λλ€.
μΈλλ³ μμ§: .NETμ GCλ μΈλλ³(Gen 0, Gen 1, Gen 2) μμ§ λ°©μμ μ¬μ©νμ¬, κ°μ²΄μ μλͺ
μ λ°λΌ λ€λ₯΄κ² λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬ν©λλ€. μ μ κ°μ²΄(짧μ μλͺ
μ κ°μ§)λ Gen 0μ ν λΉλλ©°, μ€λλ κ°μ²΄λ μμ μΈλλ‘ μ΄λν©λλ€.
κ°λΉμ§ 컬λ μ
μ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό λ¨μννμ§λ§, GCκ° μ€νλ λλ μ ν리μΌμ΄μ
μ μ€νμ΄ μΌμ μ€μ§λ μ μμΌλ―λ‘, μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€. λ°λΌμ, GCμ λμ λ°©μκ³Ό μ±λ₯μ λν μ΄ν΄λ C# κ°λ°μμ μ€μν©λλ€.
π£οΈ C#μμ μΈν°νμ΄μ€(Interface)μ μΆμ ν΄λμ€(Abstract Class)μ μ°¨μ΄μ μ μ€λͺ ν΄μ£ΌμΈμ.
C#μμ μΈν°νμ΄μ€λ λ©μλ, νλ‘νΌν°, μ΄λ²€νΈ, μΈλ±μμ μκ·Έλμ²λ§μ μ μΈν μ μμΌλ©°, ꡬνμ ν¬ν¨ν μ μμ΅λλ€. ν΄λμ€λ μ¬λ¬ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μκ³ , μΈν°νμ΄μ€λ λ€νμ±μ μν κ³μ½μΌλ‘ μ¬μ©λ©λλ€.
μΆμ ν΄λμ€λ μΌλΆ λλ μ 체 λ©μλμ ꡬνμ ν¬ν¨ν μ μμΌλ©°, μΌλΆ λ©μλλ μΆμ(ꡬνλμ§ μμ) μνλ‘ λ¨κ²¨λ μ μμ΅λλ€. ν΄λμ€λ λ¨ νλμ μΆμ ν΄λμ€λ§ μμλ°μ μ μμ΅λλ€.
ν΄λμ€κ° μΈν°νμ΄μ€λ₯Ό ꡬνν λλ μΈν°νμ΄μ€μ λͺ¨λ λ©μλλ₯Ό ꡬνν΄μΌ νμ§λ§, μΆμ ν΄λμ€λ₯Ό μμλ°μ λλ μ΄λ―Έ ꡬνλ λ©μλλ₯Ό μ¬μ¬μ©νκ³ μΆμ λ©μλλ§ κ΅¬νν μ μμ΅λλ€.
μΈν°νμ΄μ€λ λ€μν ν΄λμ€κ° λμΌν κ³μ½μ λ°λ₯΄λλ‘ κ°μ νλ λ° μ¬μ©λλ©°, μΆμ ν΄λμ€λ 곡ν΅μ κΈ°λ₯μ κ°μ§ ν΄λμ€μ λν λ² μ΄μ€ ν΄λμ€λ‘ μ¬μ©λ©λλ€.
π£οΈ C#μ delegateμ eventμ λν΄ μ€λͺ νκ³ , μ΄λ»κ² μ¬μ©νλμ§ μλ₯Ό λ€μ΄μ£ΌμΈμ.
IPλ
π£οΈ C#μμ μμΈ μ²λ¦¬(Exception Handling) λ°©λ²μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
IPλ
π£οΈ LINQ(Language Integrated Query)κ° λ¬΄μμ΄λ©°, C#μμ μ΄λ»κ² μ¬μ©λλμ?
IPλ
π£οΈ C#μ λ©ν°μ€λ λ©κ³Ό λμμ± μ²λ¦¬μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
IPλ
π£οΈ C#μμμ νλ‘νΌν°(Properties)μ νλ(Fields)μ μ°¨μ΄μ μ 무μμΈκ°μ?
IPλ
π£οΈ C#μμμ async/await ν€μλμ λν΄ μ€λͺ νκ³ , κ·Έ μ¬μ© μλ₯Ό μ 곡ν΄μ£ΌμΈμ.
IPλ
π£οΈ C#μμμ μΊ‘μν(Encapsulation), μμ(Inheritance), λ€νμ±(Polymorphism)μ μ€λͺ ν΄μ£ΌμΈμ.
IPλ
π£οΈ C#μ 'using' λ¬Έμ λν΄ μ€λͺ νκ³ , μ΄λ»κ² μ¬μ©λλμ§ μ€λͺ ν΄μ£ΌμΈμ.
IPλ
π£οΈ C#μ νΉμ±(Attributes)μ λν΄ μ€λͺ νκ³ , μ¬μ© μ¬λ‘λ₯Ό μ 곡ν΄μ£ΌμΈμ.
IPλ
π£οΈ C#μ μ λ€λ¦(Generic) νμ κ³Ό λ©μλμ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
IPλ
π£οΈ C#μμμ μΈλ±μ(Indexer) κ°λ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
IPλ
π£οΈ C#μμμ Nullable νμ μ λν΄ μ€λͺ νκ³ , μ΄λ»κ² μ¬μ©νλμ§ μ€λͺ ν΄μ£ΌμΈμ.
IPλ
π£οΈ C#μμμ Reflectionμ λν΄ μ€λͺ νκ³ , μ΄λ€ κ²½μ°μ μ¬μ©λλμ§ μλ₯Ό λ€μ΄μ£ΌμΈμ.
IPλ
π£οΈ C#μ Extension Methodsμ λν΄ μ€λͺ νκ³ , μ΄λ»κ² μ¬μ©νλμ§ μλ₯Ό λ€μ΄μ£ΌμΈμ.
IPλ
π£οΈ C#μμμ Lambda ννμμ λν΄ μ€λͺ νκ³ , μ΄λ»κ² μ¬μ©νλμ§ μλ₯Ό λ€μ΄μ£ΌμΈμ.
IPλ
Reference