λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ—£οΈ μ‹ μž… 인터뷰/C++

μ‹ μž… 개발자 κΈ°μˆ λ©΄μ ‘ : C++ 04 (C, C#, Javaμ™€μ˜ 차이점)

πŸ—£οΈ 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μ—μ„œ μ‹€ν–‰λ˜λŠ”κ°€ λ„€μ΄ν‹°λΈŒλ‘œ μ‹€ν–‰λ˜λŠ”κ°€μ— μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

잘 μ„€λͺ…λœ 글이 μžˆμ–΄ μΈν„°λ„·μ—μ„œ 링크 κ°€μ Έμ™”μŠ΅λ‹ˆλ‹€. μ°Έκ³ ν•΄ λ³΄μ„Έμš”.

https://guslabview.tistory.com/185