π£οΈ C++κ³Ό Cμμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μ§μμ μμ΄ μ΄λ€ μ£Όμ μ°¨μ΄μ μ΄ μλμ?
C++μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μμΉλ€μ μ§μ μ μΌλ‘ μ§μνλ λ°λ©΄, Cλ μ μ°¨ μ§ν₯ νλ‘κ·Έλλ° μΈμ΄λ‘, μ£Όλ‘ μμ°¨μ μΈ μ κ·Ό λ°©μμ μ΄μ μ λ§μΆ₯λλ€.
Cμμλ ꡬ쑰체(struct)λ₯Ό μ¬μ©νμ¬ κ΄λ ¨ λ°μ΄ν°λ₯Ό κ·Έλ£Ήνν μ μμ§λ§, λ©μλλ₯Ό ν¬ν¨ν μλ μμ΅λλ€.
Cμμλ μμμ΄λ ν΄λμ€ κΈ°λ°μ μΆμνλ₯Ό μ§μνμ§ μμ΅λλ€. μ΄λ μ½λμ μ¬μ¬μ©μ±κ³Ό νμ₯μ±μ μ νν©λλ€.
λν C++μ κ°μ²΄ μ€μ¬, namespace, μ€λ²λΌμ΄λ©, μμΈμ²λ¦¬, μ λ€λ¦ νλ‘κ·Έλλ° μ¬μ© κ°λ₯ν©λλ€.
π£οΈ C++κ³Ό Javaμμ μ΄λ€ μ£Όμ μ°¨μ΄μ μ΄ μλμ?
Java λ λ³΄λ€ μμ νκ³ ν΄λμ±μ΄ λμ νλ‘κ·Έλλ°μ μν΄ μ€κ³λ λ°λ©΄, C++μ μ±λ₯κ³Ό μ μμ€μ μμ€ν μ μ΄κ° μ€μν μ ν리μΌμ΄μ μ μν΄ μ€κ³λμμ΅λλ€.
Java
- μλ°λ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μλννλ κ°λΉμ§ 컬λ ν°λ₯Ό μ¬μ©ν©λλ€. μ΄λ 맀 μ£ΌκΈ°λ§λ€ μ€νλμ΄ μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ μ 리ν©λλ€.
- μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μμ κ°μ ν¨μλ§μ μ μν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ λ€νμ±κ³Ό μΆμνλ₯Ό ꡬνν©λλ€.
- μλ°λ κ°λ°μκ° λ©λͺ¨λ¦¬μ κ°μ μ μμ€μ μΈλΆ μ¬νμ μ§μ μ μΌλ‘ κ°μ ν μ μλλ‘ μ€κ³λμμ΅λλ€. μ΄λ μμ μ±κ³Ό ν΄λμ±μ κ°μ‘°νλ©°, μ΄μ 체μ μ λ 립μ μΈ μ½λλ₯Ό μμ±ν μ μλλ‘ ν©λλ€.
C++
- C++μμλ μ€λ§νΈ ν¬μΈν°(μ: shared_ptr)λ₯Ό μ¬μ©νμ¬ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μλνν μ μμ΅λλ€. κ·Έλ¬λ μ΄λ μλ°μ κ°λΉμ§ 컬λ ν°λ³΄λ€ κ°λ°μμ λͺ μμ μΈ κ΄λ¦¬κ° λ νμν©λλ€.
- C++μλ μλ°μ κ°μ 'μΈν°νμ΄μ€' κ°λ
μ΄ μμ΅λλ€. λμ μΆμ ν΄λμ€λ₯Ό μ¬μ©νμ¬ μ μ¬ν κΈ°λ₯μ ꡬνν μ μμ΅λλ€. μΆμ ν΄λμ€λ νλ μ΄μμ μμ κ°μ ν¨μλ₯Ό ν¬ν¨ν μ μμ΅λλ€.
- μΆμν΄λμ€λ₯Ό ν¬μΈν°νμΌλ‘ μ¬μ©κ°λ₯νκ°? κ°λ₯νλ€. μΆμν΄λμ€λ₯Ό κ°μ²΄λ‘μ¨ μ¬μ©μ΄ λΆκ°λ₯ν λΏμ΄μ§ ν¬μΈν°λ‘λ μ¬μ©κ°λ₯νλ€
- C++μ κ°λ°μκ° λ©λͺ¨λ¦¬ κ΄λ¦¬, ν¬μΈν° μ‘°μ λ± μ μμ€μ μΈλΆ μ¬νμ μ§μ μ μΌλ‘ μ κ·Όν μ μλλ‘ μ€κ³λμμ΅λλ€. μ΄λ λ ν° μ μ°μ±μ μ 곡νμ§λ§, λμμ 볡μ‘μ±κ³Ό μ€λ₯ κ°λ₯μ±μ μ¦κ°μν΅λλ€.
μ°Έκ³ : https://song-ift.tistory.com/m/54
π£οΈ λ©λͺ¨λ¦¬ κ΄λ¦¬κ° C++μμ μ΄λ»κ² λ€λ₯΄κ² μ²λ¦¬λλμ§, Cλ Javaμ λΉκ΅νμ¬ μ€λͺ ν΄μ£ΌμΈμ.
C++μ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μ 곡νλ©°, κ°λ°μκ° `new`μ `delete`λ₯Ό μ¬μ©νμ¬ λμ λ©λͺ¨λ¦¬ ν λΉκ³Ό ν΄μ λ₯Ό μ§μ κ΄λ¦¬ν©λλ€.
C μμ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μ 곡νμ§λ§, `malloc`κ³Ό `free` κ°μ ν¨μλ₯Ό μ¬μ©νλ©°, C++μ κ³ κΈ λ©λͺ¨λ¦¬ κ΄λ¦¬ κΈ°λ₯μ΄ μμ΅λλ€.
C#μ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μ 곡, κ°λΉμ§ 컬λ ν°κ° μ¬μ©λμ§ μλ κ°μ²΄λ₯Ό μλμΌλ‘ νμνλ©° κ°λ°μμ λ©λͺ¨λ¦¬ κ΄λ¦¬ λΆλ΄μ μ€μ¬μ€λλ€.
Javaλ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬ λ° κ°λΉμ§ 컬λ μ
μ μ¬μ©νμ¬, κ°λ°μκ° λ©λͺ¨λ¦¬ ν λΉλ§ κ΄λ¦¬νκ³ ν΄μ λ μλμΌλ‘ μ΄λ£¨μ΄μ§λλ€.
π£οΈ C++μ ν νλ¦Ώκ³Ό Javaμ μ λ€λ¦μ€, C#μ μ λ€λ¦ λ©μλ κ°μ μ°¨μ΄μ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
C++ ν
νλ¦Ώ: μ»΄νμΌ νμμ νμ
μ κ²°μ νλ©°, κ° νμ
μ λν΄ λ³λμ μ½λκ° μμ±λμ΄ μ±λ₯μ μ΄μ μ μ 곡ν©λλ€.
Java μ λ€λ¦μ€: λ°νμμ νμ
μκ±°(Type Erasure)λ₯Ό μ¬μ©νμ¬, νμ
μμ μ±μ μ 곡νλ©΄μλ νλμ μ»΄νμΌλ λ²μ λ§μ μ μ§ν©λλ€.
C# μ λ€λ¦ λ©μλ: μ»΄νμΌ νμμ νμ
μ κ²°μ νκ³ , νμ
μ 보λ₯Ό λ°νμμλ μ μ§νμ¬, 리νλ μ
κ³Ό ν¨κ» μ¬μ©ν λ μ μ°μ±μ μ 곡ν©λλ€.
π£οΈ C++μμμ μμΈ μ²λ¦¬κ° C# λ° Javaμ μ΄λ»κ² λ€λ₯Έμ§ μ€λͺ ν΄μ£ΌμΈμ.
C++ μμΈ μ²λ¦¬: `try`, `throw`, `catch` λΈλ‘μ μ¬μ©νλ©°, μμΈλ κ° λλ μ°Έμ‘°λ‘ μ λ¬λκ³ , νμ€ λΌμ΄λΈλ¬λ¦¬ μμΈ ν΄λμ€ μΈμ μ¬μ©μ μ μ μμΈλ μμ±ν μ μμ΅λλ€.
Java μμΈ μ²λ¦¬: `try`, `catch`, `finally` λΈλ‘κ³Ό `throw` ν€μλλ₯Ό μ¬μ©νλ©°, λͺ¨λ μμΈλ `Throwable` ν΄λμ€λ₯Ό μμλ°λ κ°μ²΄μ
λλ€. Checked λ° Unchecked μμΈλ‘ ꡬλΆλ©λλ€.
C# μμΈ μ²λ¦¬: `try`, `catch`, `finally` λ° `throw`λ₯Ό μ¬μ©νλ©°, λͺ¨λ μμΈλ `System.Exception` ν΄λμ€λ₯Ό μμλ°μ΅λλ€. C#μμλ Checked μμΈ κ°λ
μ΄ μμ΅λλ€.
μ¦, C++μ μμΈλ₯Ό κ°μ΄λ μ°Έμ‘°λ‘ μ λ¬νλ λ°λ©΄, Javaμ C#μ λͺ¨λ κ°μ²΄λ‘ μ²λ¦¬ν©λλ€. Javaλ Checkedμ Unchecked μμΈλ₯Ό ꡬλΆνλ λ°λ©΄, C++μ C#μ κ·Έλ¬ν ꡬλΆμ΄ μμ΅λλ€.
π£οΈ C++μ λ€μ€ μμκ³Ό Javaμ μΈν°νμ΄μ€ κΈ°λ° μμ μ¬μ΄μ μ°¨μ΄μ μ μ€λͺ ν΄μ£ΌμΈμ.
C++ λ€μ€ μμ: C++μμλ νλμ ν΄λμ€κ° μ¬λ¬ ν΄λμ€λ‘λΆν° μμ±κ³Ό λ©μλλ₯Ό μμλ°μ μ μμΌλ©°, μ΄λ‘ μΈν΄ λ€μ΄μλͺ¬λ λ¬Έμ μ κ°μ 볡μ‘μ±μ΄ λ°μν μ μμ΅λλ€.
Java μΈν°νμ΄μ€ μμ: Javaμμλ ν΄λμ€κ° λ€μ€ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μμ§λ§, λ€μ€ ν΄λμ€ μμμ νμ©λμ§ μμ΅λλ€. μΈν°νμ΄μ€λ λ©μλ μ μΈλ§ ν¬ν¨νλ©°, ꡬνμ μμλ°μ ν΄λμ€μμ μ 곡ν©λλ€.
C++μ Javaμ μ£Όλ μ°¨μ΄: C++μ λ€μ€ μμμ ν΄λμ€ μ 체(μνμ νλ)λ₯Ό μμνλ λ°λ©΄, Javaμ μΈν°νμ΄μ€ μμμ νλ(λ©μλ μκ·Έλμ²)λ§μ μμν©λλ€.
μ€κ³ μ² νμ μ°¨μ΄: C++μ λ€μ€ μμμ λ ν° μ μ°μ±μ μ 곡νμ§λ§ 볡μ‘μ±μ μ¦κ°μν€λ λ°λ©΄, Javaμ μΈν°νμ΄μ€ μμμ ꡬνμ κ°μ νμ§ μκ³ λ€νμ±μ μ 곡νλ©°, μμ ꡬ쑰λ₯Ό λ λ¨μνκ² μ μ§ν©λλ€.
π£οΈ C++κ³Ό C#μμ κ°λΉμ§ 컬λ μ μ λ€λ£¨λ λ°©μμ μ°¨μ΄μ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
C++μ νμ€μΌλ‘ κ°λΉμ§ 컬λ μ
μ μ 곡νμ§ μμΌλ©°, λ©λͺ¨λ¦¬ κ΄λ¦¬λ μ£Όλ‘ κ°λ°μμ μ±
μμ
λλ€. C++11 μ΄νλ‘ μ€λ§νΈ ν¬μΈν° λ±μ μμ κ΄λ¦¬ κΈ°λ₯μ΄ λμ
λμμ§λ§, μ΄λ μ ν΅μ μΈ κ°λΉμ§ 컬λ μ
κ³Όλ λ€λ¦
λλ€.
C#μ μλ κ°λΉμ§ 컬λ μ
μ μ 곡νμ¬, λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ₯Ό μλμΌλ‘ λ©λͺ¨λ¦¬μμ ν΄μ ν©λλ€. μ΄λ κ°λ°μμ λ©λͺ¨λ¦¬ κ΄λ¦¬ λΆλ΄μ μ€μ¬μ£Όκ³ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§ν©λλ€.
C++μ κ°λ°μκ° λ©λͺ¨λ¦¬λ₯Ό μ§μ κ΄λ¦¬ν΄μΌ νμ§λ§, C#μ κ°λΉμ§ 컬λ ν°κ° λ©λͺ¨λ¦¬ κ΄λ¦¬μ λλΆλΆμ μλμΌλ‘ μ²λ¦¬ν©λλ€.
C++μμλ λ©λͺ¨λ¦¬ κ΄λ¦¬μ μ νμ±κ³Ό μ΅μ νκ° μ€μνμ§λ§, C#μμλ κ°λΉμ§ 컬λ ν°μ μ±λ₯κ³Ό ν¨μ¨μ±μ΄ μ€μν κ³ λ €μ¬νμ΄ λ©λλ€.
π£οΈ C++μμμ ν¬μΈν°μ μ°Έμ‘° κ°λ μ΄ C#κ³Ό Javaμμ μ΄λ»κ² λ€λ₯΄κ² ννλλμ§ μ€λͺ ν΄μ£ΌμΈμ.
C++μμλ ν¬μΈν°μ μ°Έμ‘°λ₯Ό ν΅ν΄ λ©λͺ¨λ¦¬λ₯Ό μ§μ μ‘°μν μ μμ§λ§, C#κ³Ό Javaλ 보μκ³Ό κ°κ²°μ±μ μν΄ μ΄λ¬ν μ μμ€ λ©λͺ¨λ¦¬ μ‘°μμ μ ννκ±°λ νμ©νμ§ μμ΅λλ€.
C++μμ ν¬μΈν°λ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ§μ μ μ₯νκ³ μ‘°μν μ μμΌλ©°, μ°Έμ‘°λ λ€λ₯Έ λ³μμ λν λ³μΉμ μ 곡ν©λλ€. ν¬μΈν°μ μ°Έμ‘°λ₯Ό ν΅ν΄ λ©λͺ¨λ¦¬λ₯Ό μ§μ μ‘°μνλ κ²μ΄ κ°λ₯ν©λλ€.
C#μμλ κ΄λ¦¬λλ νκ²½μμ ν¬μΈν° λμ μ°Έμ‘° νμ
μ μ¬μ©ν©λλ€. κ·Έλ¬λ 'unsafe' 컨ν
μ€νΈ λ΄μμ C μ€νμΌ ν¬μΈν°λ₯Ό μ¬μ©ν μ μμ΅λλ€. C#μ μ°Έμ‘°λ C++μ μ°Έμ‘°μ μ μ¬νμ§λ§, λ©λͺ¨λ¦¬ μ‘°μμ μ νμ μ
λλ€.
Javaμμλ μ ν΅μ μΈ ν¬μΈν° κ°λ
μ΄ μμΌλ©°, λͺ¨λ κ°μ²΄λ μ°Έμ‘°λ₯Ό ν΅ν΄ μ κ·Όλ©λλ€. Javaμ μ°Έμ‘°λ C++μ ν¬μΈν°μ μ μ¬νμ§λ§, λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ§μ μ‘°μν μ μμ΅λλ€.
π£οΈ C++μμμ RAII(Resource Acquisition Is Initialization) ν¨ν΄κ³Ό Javaμ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬ λ°©μμ μ°¨μ΄μ μ μ€λͺ ν΄μ£ΌμΈμ. μ₯λ¨μ λ λΉκ΅ν΄μ£ΌμΈμ.
C++μ RAIIλ λ λͺ μμ μ΄κ³ μ μ΄κ° κ°λ₯ν λ°λ©΄, Javaμ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬λ μ¬μ©μ μ©μ΄μ±κ³Ό μμ μ±μ μ 곡ν©λλ€.
C++μμ RAIIλ μμ(μ£Όλ‘ λ©λͺ¨λ¦¬)μ κ°μ²΄μ μλͺ
κ³Ό κ²°λΆμμΌ, κ°μ²΄ μμ± μ μμμ ν λΉνκ³ , κ°μ²΄ μλ©Έ μ μμμ ν΄μ ν©λλ€. μ΄λ λ©λͺ¨λ¦¬ κ΄λ¦¬λΏλ§ μλλΌ νμΌ νΈλ€, λ€νΈμν¬ μ°κ²° λ±μ μμ κ΄λ¦¬μλ μ¬μ©λ©λλ€.
Javaμμλ κ°λΉμ§ 컬λ ν°κ° λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ₯Ό μλμΌλ‘ κ°μ§νκ³ λ©λͺ¨λ¦¬λ₯Ό ν΄μ ν©λλ€. κ°λ°μλ λ©λͺ¨λ¦¬ ν λΉμ κ΄λ¦¬νμ§λ§, ν΄μ λ κ°λΉμ§ 컬λ ν°κ° λ΄λΉν©λλ€.
C++μ RAIIλ λ©λͺ¨λ¦¬ λμλ₯Ό μλ°©νκ³ , κ²°μ μ μλ©Έμ μ 곡νμ§λ§, μ¬μ©μ΄ 볡μ‘νκ³ μ€λ₯λ₯Ό μ λ°νκΈ° μ½μ΅λλ€. λ°λ©΄, Javaμ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬λ κ°λ°μμ λΆλ΄μ μ€μ΄μ§λ§, κ°λΉμ§ 컬λ μ
μΌλ‘ μΈν μ±λ₯ μ νμ μμΈ‘ λΆκ°λ₯ν μλ©Έ νμ΄λ°μ΄ λ¨μ μ
λλ€.
π£οΈ C++κ³Ό C#μμμ μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ μ°¨μ΄μ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
μ€λ²λ‘λ©(Overloading) - μΈμ΄ 곡ν΅: C++κ³Ό C# λͺ¨λμμ λ©μλ μ€λ²λ‘λ©μ λμΌν μ΄λ¦μ κ°μ§ λ©μλλ₯Ό 맀κ°λ³μμ νμ
μ΄λ κ°μκ° λ€λ₯΄λλ‘ μ μνλ κ²μ μλ―Έν©λλ€. μ€λ²λ‘λ©μ μ»΄νμΌ μκ°μ κ²°μ λλ©°, λ©μλμ μκ·Έλμ²λ₯Ό λ€λ₯΄κ² νμ¬ λ€μν 맀κ°λ³μμ λμν μ μκ² ν©λλ€.
μ€λ²λΌμ΄λ©(Overriding) - μΈμ΄ 곡ν΅: C++κ³Ό C#μμ μ€λ²λΌμ΄λ©μ νμ ν΄λμ€κ° μμ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνλ κ²μ λ§ν©λλ€. μ€λ²λΌμ΄λ©μ λ°νμμ λ€νμ±μ μ€ννλ λ° μ¬μ©λλ©°, κ°μ λ©μλ μκ·Έλμ²λ₯Ό κ°μ§μ§λ§ λ€λ₯Έ ꡬνμ μ 곡ν©λλ€.
C++μμμ μ£Όμμ¬ν: C++μμλ μ€λ²λΌμ΄λ©λ λ©μλλ₯Ό 'virtual'λ‘ μ μΈν΄μΌ νλ©°, νμ ν΄λμ€μμ 'override' ν€μλλ₯Ό μ¬μ©νμ¬ λͺ
μμ μΌλ‘ μ€λ²λΌμ΄λ©μ νμν μ μμ΅λλ€.
C#μμμ νΉμ§: C#μμλ μ€λ²λΌμ΄λ©ν λ©μλλ₯Ό 'virtual'λ‘ μ μΈνκ³ , νμ ν΄λμ€μμ 'override' ν€μλλ₯Ό μ¬μ©νμ¬ μ€λ²λΌμ΄λλ₯Ό ꡬνν©λλ€. λν, 'new' ν€μλλ₯Ό μ¬μ©νμ¬ λ©μλλ₯Ό μ¨κΈ°λ κ²λ κ°λ₯ν©λλ€(μ΄λ μ€λ²λΌμ΄λ©κ³Όλ λ€λ₯Έ κ°λ
μ).
π£οΈ C++μμμ νμ€ ν νλ¦Ώ λΌμ΄λΈλ¬λ¦¬(STL)κ³Ό Javaμ 컬λ μ νλ μμν¬μ μ£Όμ μ°¨μ΄μ μ μ€λͺ ν΄μ£ΌμΈμ.
C++ STL (Standard Template Library): C++μ STLμ μΌλ°νλ 컨ν
μ΄λ(μ: 벑ν°, 리μ€νΈ, 맡), μκ³ λ¦¬μ¦(μ: μ λ ¬, κ²μ), λ°λ³΅μ λ±μ μ 곡νλ©°, ν
νλ¦Ώ κΈ°λ°μΌλ‘ λ€μν λ°μ΄ν° νμ
μ λν μ μ°ν μ²λ¦¬λ₯Ό μ§μν©λλ€.
Java 컬λ μ
νλ μμν¬: Javaμ 컬λ μ
νλ μμν¬λ λ€μν 컨ν
μ΄λ ν΄λμ€(μ: ArrayList, LinkedList, HashMap)μ μΈν°νμ΄μ€λ₯Ό μ 곡νλ©°, μ λ€λ¦μ ν΅ν΄ λ€μν νμ
μ μμ©ν©λλ€. Java 컬λ μ
μ κ°μ²΄λ§ μ μ₯ν μ μμ΅λλ€.
λ©λͺ¨λ¦¬ κ΄λ¦¬: C++ STLμ κ°λ°μκ° λ©λͺ¨λ¦¬ κ΄λ¦¬μ λ μ κ·Ήμ μΌλ‘ μ°Έμ¬ν΄μΌ νλ©°, RAII μμΉμ λ°λ₯΄λ λ°λ©΄, Java 컬λ μ
μ μλ κ°λΉμ§ 컬λ μ
μ μμ‘΄ν©λλ€.
μ±λ₯ μ°¨μ΄: C++ STLμ μ»΄νμΌ μκ°μ μ΅μ νλλ©°, ν
νλ¦Ώ μΈμ€ν΄μ€νλ‘ μΈν΄ λ λΉ λ₯Έ μ±λ₯μ μ 곡ν μ μμ§λ§, Java 컬λ μ
μ λ°νμμ νμ
μκ±°λ₯Ό μ¬μ©νμ¬ μΌλΆ μ μ°μ±μ μ 곡νλ©°, μ»΄νμΌ μκ°λ³΄λ€λ λ°νμμ μ΅μ νλ©λλ€.
π£οΈ C++μμμ μ°μ°μ μ€λ²λ‘λ©μ΄ Java λλ C#κ³Ό μ΄λ»κ² λ€λ₯Έμ§ μ€λͺ ν΄μ£ΌμΈμ.
C++μμλ κ΄λ²μν μ°μ°μ μ€λ²λ‘λ©μ΄ κ°λ₯νλ©°, μ΄λ κ°λ°μμκ² ν° μ μ°μ±μ μ 곡ν©λλ€. λ°λ©΄, Javaλ μ°μ°μ μ€λ²λ‘λ©μ μ§μνμ§ μμΌλ©°, C#μ μ΄ λ μΈμ΄μ μ€κ° μ λμ μ°μ°μ μ€λ²λ‘λ© κΈ°λ₯μ μ 곡ν©λλ€.
C++μμλ κ±°μ λͺ¨λ μ°μ°μλ₯Ό μ¬μ©μ μ μ ν΄λμ€ λλ ꡬ쑰체μ λν΄ μ€λ²λ‘λ©ν μ μμ΄, κ°λ°μκ° μ°μ°μμ νλμ λ§μΆ€ μ€μ ν μ μμ΅λλ€. μ΄λ ν΄λμ€ λλ κ°μ²΄ κ°μ μ°μ°μ νμ€ μ°μ°μ(μ: +, -, *, / λ±)λ₯Ό μ¬μ©νμ¬ μ§κ΄μ μΌλ‘ ννν μ μκ² ν©λλ€.
Javaμμλ μ°μ°μ μ€λ²λ‘λ©μ μ§μνμ§ μμ΅λλ€. λ°λΌμ Javaμμλ μ°μ°μλ₯Ό μ€λ²λ‘λ©νλ λμ λ©μλλ₯Ό μ¬μ©νμ¬ λμΌν κΈ°λ₯μ ꡬνν΄μΌ ν©λλ€. μ΄λ Javaμ μ€κ³ μ² νμμ κ°λ
μ±κ³Ό λ¨μμ±μ μ€μνκΈ° λλ¬Έμ
λλ€.
C#μμλ μ νμ μΈ μ°μ°μ μ€λ²λ‘λ©μ μ§μν©λλ€. C#μμλ μ¬μ©μ μ μ νμ
μ λν΄ νΉμ μ°μ°μλ₯Ό μ€λ²λ‘λ©ν μ μμ§λ§, C++λ§νΌ κ΄λ²μνμ§λ μμ΅λλ€.
π£οΈ C++μ λ°νμ νμ μ 보(RTTI)μ Javaμ 리νλ μ , C#μ 리νλ μ κ°μ μ°¨μ΄μ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
C++μ RTTIλ μ£Όλ‘ νμ μ μλ³μ μ΄μ μ λ§μΆλ©° κΈ°λ₯μ΄ μ νμ μΈ λ°λ©΄, Javaμ C#μ 리νλ μ μ ν¨μ¬ λ κ°λ ₯νκ³ μ μ°νλ©°, ν΄λμ€μ λ©νλ°μ΄ν°λ₯Ό μ‘°μνλ κ΄λ²μν κΈ°λ₯μ μ 곡ν©λλ€. Javaμ C#μ 리νλ μ μ ν΄λμ€ κ΅¬μ‘° λ° λμμ λμ μ‘°μμ νΉν μ μ©ν©λλ€.
C++μμ RTTIλ κ°μ²΄μ λ°νμ νμ
μ νμΈνλ κΈ°λ₯μ μ 곡ν©λλ€. μ£Όλ‘ `typeid` μ°μ°μμ `dynamic_cast`λ₯Ό μ¬μ©νμ¬ λ°νμμ κ°μ²΄μ μ€μ νμ
μ νμΈνκ³ , λ€μ΄μΊμ€ν
μ μμ νκ² μνν©λλ€.
Javaμμ 리νλ μ
μ λ°νμμ ν΄λμ€, νλ, λ©μλ, μ΄λ
Έν
μ΄μ
λ±μ λν μ 보λ₯Ό μ‘°ννκ³ μ‘°μν μ μλ λ κ΄λ²μν κΈ°λ₯μ μ 곡ν©λλ€. ν΄λμ€ μ 보λ₯Ό μ»κ³ , κ°μ²΄λ₯Ό λμ μΌλ‘ μμ±νλ©°, λ©μλλ₯Ό νΈμΆνκ³ , νλλ₯Ό μμ ν μ μμ΅λλ€.
C#μμλ 리νλ μ
μ Javaμ μ μ¬νκ² ν΄λμ€μ λ©νλ°μ΄ν°λ₯Ό λ°νμμ κ²μ¬νκ³ μ‘°μν μ μλ κΈ°λ₯μ μ 곡ν©λλ€. C#μ 리νλ μ
μ ν΄λμ€μ ꡬ쑰λ₯Ό μ‘°μ¬νκ³ , κ°μ²΄λ₯Ό μμ±νλ©°, λ©μλλ₯Ό νΈμΆνκ³ , νλ‘νΌν°μ νλμ μ κ·Όν μ μμ΅λλ€.
π£οΈ C++μ 'ꡬ쑰체'μ C#μ 'ꡬ쑰체'μ μ°¨μ΄μ μ μ€λͺ ν΄μ£ΌμΈμ. Javaμμλ 'ꡬ쑰체'κ° μ΄λ»κ² λ€λ₯΄κ² ννλλμ?
C++μ ꡬ쑰체λ ν΄λμ€μ μ μ¬ν κΈ°λ₯μ κ°μ§λ κΈ°λ³Έμ μΌλ‘ λ°μ΄ν° ꡬ쑰μ μ¬μ©λλ©°, C#μ ꡬ쑰체λ κ° νμ μΌλ‘ μκ³ , λΉ λ₯΄κ² 볡μ¬λ μ μλ λ°μ΄ν°μ μ ν©ν©λλ€. λ°λ©΄, Javaμμλ ꡬ쑰체 κ°λ μ΄ μμΌλ©°, λΉμ·ν μν μ νλ ν΄λμ€λ₯Ό μ¬μ©ν©λλ€.
C++μμ ꡬ쑰체λ ν΄λμ€μ λ§€μ° μ μ¬νλ©°, κΈ°λ³Έμ μΌλ‘ public μ κ·Ό μ§μ μλ₯Ό κ°μ§λλ€. λ©μλ, μμ±μ, μμ λ± ν΄λμ€μ κ°μ κΈ°λ₯μ μ§μνμ§λ§, μ£Όλ‘ κ°λ¨ν λ°μ΄ν° ꡬ쑰λ₯Ό νννλ λ° μ¬μ©λ©λλ€.
C#μμ ꡬ쑰체λ κ° νμ
(Value Type)μΌλ‘, μ€νμ ν λΉλλ©°, κ°λ¨ν λ°μ΄ν° ꡬ쑰μ μ¬μ©λ©λλ€. ν΄λμ€μ λ¬λ¦¬ μμμ λ°μ§ λͺ»νλ©°, μΈν°νμ΄μ€ ꡬνμ΄ κ°λ₯νμ§λ§ κΈ°λ³Έμ μΌλ‘ κ° λ³΅μ¬ λ°©μμΌλ‘ λμν©λλ€.
Javaλ C++ λλ C# μ€νμΌμ 'ꡬ쑰체'λ₯Ό μ§μ μ§μνμ§ μμ΅λλ€. λμ , ν΄λμ€λ₯Ό μ¬μ©νμ¬ λΉμ·ν ꡬ쑰λ₯Ό ννν μ μμΌλ©°, λͺ¨λ κ²μ μ°Έμ‘° νμ
(Reference Type)μΌλ‘ μ²λ¦¬λ©λλ€.
π£οΈ C++μμμ μ μ²λ¦¬κΈ° μ§μλ¬Έκ³Ό C# λλ Javaμμμ λΉμ·ν κΈ°λ₯λ€μ μ΄λ»κ² λΉκ΅ν μ μλμ?
C++μ μ μ²λ¦¬κΈ° μ§μλ¬Έμ μ»΄νμΌ μ μ μ½λλ₯Ό λ³ννκ³ , C#μμλ λ³΄λ€ μ νλ ννλ‘ μ¬μ©λλ©°, Javaμμλ μ μ²λ¦¬κΈ° λμ λ€λ₯Έ λ°©μμΌλ‘ μ‘°κ±΄λΆ λ‘μ§μ μ²λ¦¬ν©λλ€.
C++μμ μ μ²λ¦¬κΈ° μ§μλ¬Έμ μ»΄νμΌ μ μ μ€νλλ©°, `#include`, `#define`, `#ifdef` λ±μ ν¬ν¨ν©λλ€. μ΄λ¬ν μ§μλ¬Έμ μ½λλ₯Ό 쑰건λΆλ‘ μ»΄νμΌνκ±°λ, 맀ν¬λ‘λ₯Ό μ μνκ³ , νμΌμ ν¬ν¨νλ λ° μ¬μ©λ©λλ€.
C#μμλ `#if`, `#else`, `#endif`, `#define`κ³Ό κ°μ μ μ²λ¦¬κΈ° μ§μλ¬Έμ μ¬μ©νμ¬ μ‘°κ±΄λΆ μ»΄νμΌμ μνν©λλ€. C#μμλ μ μ²λ¦¬κΈ°μ κΈ°λ₯μ΄ C++λ³΄λ€ μ νμ μ΄λ©°, μ£Όλ‘ μ»΄νμΌ νμ 쑰건μ λ°λΌ μ½λλ₯Ό ν¬ν¨νκ±°λ μ μΈνλ λ° μ¬μ©λ©λλ€.
Javaμμλ μ μ²λ¦¬κΈ° μ§μλ¬Έμ΄ μμ΅λλ€. λμ , μ‘°κ±΄λΆ μ»΄νμΌμ΄λ μ½λ μ€μ μ λ°νμμ νκ°λλ 쑰건문 λλ μΈλΆ μ€μ νμΌκ³Ό κ°μ λ€λ₯Έ λ©μ»€λμ¦μ ν΅ν΄ μνλ©λλ€.
π£οΈ C++μ μλ©Έμμ Java/C#μ νμ΄λλΌμ΄μ κ°μ μ°¨μ΄μ κ³Ό κ°κ°μ μ¬μ© μμ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
C++μμ μλ©Έμλ κ°μ²΄μ μλͺ
μ΄ λλ λ μλμΌλ‘ νΈμΆλλ©°, μ£Όλ‘ μμ ν΄μ μ μ 리 μμ
μ μ¬μ©λ©λλ€. μλ©Έμλ κ°μ²΄κ° μ€μ½νλ₯Ό λ²μ΄λκ±°λ `delete`κ° νΈμΆλ λ λͺ
μμ μΌλ‘ μ€νλ©λλ€.
Javaμ C#μμ νμ΄λλΌμ΄μ λ κ°λΉμ§ 컬λ ν°κ° κ°μ²΄λ₯Ό λ©λͺ¨λ¦¬μμ μ κ±°νκΈ° μ μ νΈμΆλ©λλ€. μ΄λ μμμ μ 리νκΈ° μν΄ μ¬μ©λμ§λ§, μ νν νΈμΆ μμ μ΄ λ³΄μ₯λμ§ μμΌλ©°, μ±λ₯μ λΆμ μ μΈ μν₯μ μ€ μ μμ΅λλ€.
C++μ μλ©Έμλ κ°μ²΄μ μλͺ
μ΄ λͺ
ννκ² λλλ μμ μ λ°λ‘ νΈμΆλλ λ°λ©΄, Javaμ C#μ νμ΄λλΌμ΄μ λ κ°λΉμ§ 컬λ ν°μ μ€ν νμ΄λ°μ λ°λΌ νΈμΆλλ―λ‘ μμΈ‘ν μ μμ΅λλ€.
κΆμ₯ μ¬ν: C++μμλ μλ©Έμλ₯Ό ν΅ν΄ μμ κ΄λ¦¬κ° μΌλ°μ μ΄κ³ κΆμ₯λλ λ°λ©΄, Javaμ C#μμλ νμ΄λλΌμ΄μ 보λ€λ `try-with-resources` (Java) λλ `using` (C#) λ¬Έμ μ¬μ©ν μμ μ λ¦¬κ° κΆμ₯λ©λλ€.
π£οΈ C++, C# κ·Έλ¦¬κ³ Javaμμμ μΈν°νμ΄μ€μ μΆμ ν΄λμ€μ μ¬μ©κ³Ό ꡬν λ°©μμ λν μ°¨μ΄μ μ μ€λͺ ν΄μ£ΌμΈμ.
C++μ μΈν°νμ΄μ€ κ°λ μ μΆμ ν΄λμ€λ‘ ꡬννλ λ°λ©΄, Javaμ C#μ μΈν°νμ΄μ€μ μΆμ ν΄λμ€λ₯Ό λ³λλ‘ μ 곡ν©λλ€. Javaμ C#μ μΈν°νμ΄μ€λ λ©μλ ꡬνμ ν¬ν¨νμ§ μλ λ°λ©΄, C++μ μΆμ ν΄λμ€λ μμ κ°μ ν¨μ(μΈν°νμ΄μ€ μν )μ μΌλ° λ©€λ² ν¨μ λͺ¨λλ₯Ό ν¬ν¨ν μ μμ΅λλ€.
C++μμλ μΈν°νμ΄μ€λΌλ κ°λ
μ΄ λͺ
μμ μΌλ‘ μ‘΄μ¬νμ§ μμΌλ©°, μμ κ°μ ν¨μλ₯Ό κ°μ§ μΆμ ν΄λμ€λ₯Ό ν΅ν΄ μΈν°νμ΄μ€μ μ μ¬ν νλμ ꡬνν©λλ€. μΆμ ν΄λμ€λ νλ μ΄μμ μμ κ°μ ν¨μλ₯Ό ν¬ν¨ν μ μμΌλ©°, μ΄λ₯Ό μμλ°μ μλΈ ν΄λμ€μμ ꡬνν΄μΌ ν©λλ€.
Javaμμ μΈν°νμ΄μ€λ λͺ¨λ λ©μλκ° μΆμ λ©μλμΈ νμ
μΌλ‘, Java 8 μ΄νλΆν°λ λν΄νΈ λ©μλλ₯Ό ν¬ν¨ν μ μμ΅λλ€. μΆμ ν΄λμ€λ μΌλΆ ꡬνλ λ©μλλ₯Ό κ°μ§ μ μμΌλ©°, μμ ν ꡬνλμ§ μμ ν΄λμ€λ₯Ό μλ―Έν©λλ€.
C#μμ μΈν°νμ΄μ€λ λ©μλ, νλ‘νΌν°, μ΄λ²€νΈ, μΈλ±μ λ±μ μ μΈλ§ ν¬ν¨ν μ μμΌλ©°, ꡬνμ ν¬ν¨ν μ μμ΅λλ€. μΆμ ν΄λμ€λ μΌλΆ λ©μλκ° κ΅¬νλμ΄ μκ±°λ ꡬνλμ§ μμ ν΄λμ€λ‘, μμλ°μ μλΈ ν΄λμ€μμ λλ¨Έμ§ κ΅¬νμ μμ±ν΄μΌ ν©λλ€.
Reference
C++, Java μ μ¬μ μ°¨μ΄μ μ 리 https://makefortune2.tistory.com/192
https://hashdork.com/ko/c-hash-interview-questions/
https://sb-story.tistory.com/6
C#μ C++λ³΄λ¨ μλ°λ λΉμ·νꡬμ,
C#κ³Ό C++μ κ°μ₯ ν° μ°¨μ΄μ μ CLRμμ μ€νλλκ° λ€μ΄ν°λΈλ‘ μ€νλλκ°μ μλ€κ³ μκ°ν©λλ€.
μ μ€λͺ λ κΈμ΄ μμ΄ μΈν°λ·μμ λ§ν¬ κ°μ Έμμ΅λλ€. μ°Έκ³ ν΄ λ³΄μΈμ.