λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

순수 가상 ν•¨μˆ˜, 좔상 ν΄λž˜μŠ€μ— λŒ€ν•˜μ—¬

by 5566 2023. 8. 31.

1. 순수 가상 ν•¨μˆ˜ (Pure virtual function)

순수 가상 ν•¨μˆ˜λŠ” C++μ—μ„œ λ§Œλ“€μ–΄μ§„ κ°œλ…μœΌλ‘œ, 기본적으둜 ν•¨μˆ˜μ˜ λ™μž‘μ΄ λ§ˆλ ¨λ˜μ–΄ μžˆμ§€ μ•Šμ€ ν•¨μˆ˜μž…λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λŠ” virtual ν‚€μ›Œλ“œμ™€ = 0을 ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ ν‘œμ‹œλ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ ν•¨μˆ˜λŠ” 클래슀 μ •μ˜ λ‚΄μ—μ„œ μ„ μ–Έλ˜μ§€λ§Œ κ΅¬ν˜„μ€ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό 상속받은 νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄μ•Ό ν•©λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€:

class BaseClass {
public:
    virtual void pureVirtualFunction() = 0;
};

순수 가상 ν•¨μˆ˜λŠ” μžμ²΄μ μœΌλ‘œλŠ” μΈμŠ€ν„΄μŠ€ν™”ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 순수 가상 ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜λŠ” 클래슀λ₯Ό "좔상 클래슀"둜 κ°„μ£Όν•©λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ν™”λ  수 μ—†μœΌλ©°, 상속을 톡해 νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ κ΅¬μ²΄ν™”λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜λŠ” νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ μž¬μ •μ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ λ™μž‘μ„ λ¬΄μ‹œν•˜κ³  νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ 자체적인 λ™μž‘μ„ κ΅¬ν˜„ν•  수 있게 λ©λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ€ 경우, νŒŒμƒ ν΄λž˜μŠ€λŠ” λ˜ν•œ 좔상 클래슀둜 κ°„μ£Όλ©λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜μ˜ κΈ°λŠ₯

순수 가상 ν•¨μˆ˜λŠ” 클래슀 λ‚΄λΆ€μ—μ„œ 선언될 λ•Œ, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό λ°˜λ“œμ‹œ μ •μ˜ν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‹€μŒκ³Ό 같은 κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€:

  • λ‹€ν˜•μ„± (Polymorphism): νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ™μž‘μ„ μž¬μ •μ˜ν•¨μœΌλ‘œμ¨, λ™μΌν•œ κΈ°λ³Έ 클래슀λ₯Ό 상속받은 μ—¬λŸ¬ 객체에 λ‹€μ–‘ν•œ λ™μž‘μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 좔상화 (Abstraction): 좔상 ν΄λž˜μŠ€μ— ν¬ν•¨λ˜λŠ” 순수 가상 ν•¨μˆ˜λŠ” μ‹€μ œ λ™μž‘μ΄ μ •μ˜λ˜μ§€ μ•Šμ€ μƒνƒœλ‘œ μ œκ³΅λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κ³  클래슀 계측 ꡬ쑰λ₯Ό ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 닀쀑 상속 (Multiple Inheritance): μ—¬λŸ¬ 개의 κΈ°λ³Έ ν΄λž˜μŠ€μ— λ™μ‹œμ— νŒŒμƒ 클래슀λ₯Ό μ •μ˜ν•˜λŠ” 경우, 순수 가상 ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ λ™μž‘μ„ μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜λŠ” C++μ—μ„œ μ€‘μš”ν•œ κ°œλ… 쀑 ν•˜λ‚˜λ‘œ, 클래슀 λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό μœ„ν•œ ν•„μˆ˜μ μΈ κΈ°λŠ₯λ“€ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. λ°˜λ“œμ‹œ 상속을 톡해 μž¬μ •μ˜λ˜μ–΄μ•Ό ν•˜λŠ” ν•¨μˆ˜λ‘œ, 클래슀의 λ‹€ν˜•μ„±κ³Ό μœ μ—°μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

2. 좔상 클래슀 (Abstract class)

좔상 ν΄λž˜μŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ 순수 가상 ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜λŠ” 클래슀둜, μΈμŠ€ν„΄μŠ€ν™”λ  수 μ—†λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ ν΄λž˜μŠ€λ“€μ—κ²Œ 곡톡적인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜κ³ , ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ꡬ체적인 λ™μž‘μ„ μ •μ˜ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

좔상 ν΄λž˜μŠ€λŠ” λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°€μ§‘λ‹ˆλ‹€:

  • 좔상 ν΄λž˜μŠ€λŠ” 순수 가상 ν•¨μˆ˜λ₯Ό ν•œ 개 이상 ν¬ν•¨ν•©λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λŠ” virtual ν‚€μ›Œλ“œμ™€ = 0을 μ‚¬μš©ν•˜μ—¬ μ„ μ–Έλ˜λ©°, 좔상 클래슀의 μ •μ˜ λ‚΄μ—μ„œλŠ” κ΅¬ν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 좔상 ν΄λž˜μŠ€λŠ” 직접적인 μΈμŠ€ν„΄μŠ€ν™”κ°€ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. μ΄λŠ” 좔상 ν΄λž˜μŠ€κ°€ μ™„μ „ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ”°λΌμ„œ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” νŒŒμƒ 클래슀λ₯Ό λ§Œλ“€κ³ , ν•΄λ‹Ή νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ 순수 가상 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • 좔상 ν΄λž˜μŠ€λŠ” 자체적으둜 객체λ₯Ό 생성할 수 μ—†μ§€λ§Œ, 좔상 클래슀의 ν¬μΈν„°λ‚˜ μ°Έμ‘°λ₯Ό 톡해 νŒŒμƒ 클래슀의 객체λ₯Ό 가리킬 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 좔상 클래슀의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν†΅μΌν•˜κ³ , λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

좔상 클래슀의 μ£Όμš” λͺ©μ μ€ λ‹€λ₯Έ ν΄λž˜μŠ€λ“€ μ‚¬μ΄μ˜ 곡톡적인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κ³  κΈ°λŠ₯을 μΌλ°˜ν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” 클래슀 계측 κ΅¬μ‘°μ—μ„œ μƒμœ„ μˆ˜μ€€μ˜ 좔상화λ₯Ό μ œκ³΅ν•˜λ©°, μ½”λ“œ μž¬μ‚¬μš©μ„ μ΄‰μ§„ν•©λ‹ˆλ‹€. νŒŒμƒ ν΄λž˜μŠ€λŠ” 좔상 ν΄λž˜μŠ€μ—μ„œ 상속받은 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬μ²΄ν™”ν•˜κ³ , ν•„μš”ν•œ λ™μž‘μ„ μž¬μ •μ˜ν•¨μœΌλ‘œμ¨ λ‹€μ–‘ν•œ 객체의 λ™μž‘μ„ λŒ€ν‘œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

좔상 ν΄λž˜μŠ€λŠ” C++μ—μ„œ λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ€‘μš”ν•œ 도ꡬ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있으며, 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 κ°œλ…μ„ μ™„μ„±ν•˜λŠ”λ° ν•„μˆ˜μ μΈ λ„κ΅¬μž…λ‹ˆλ‹€.

3. 가상 ν•¨μˆ˜ (Virtual function)

가상 ν•¨μˆ˜λŠ” C++μ—μ„œ λ‹€ν˜•μ„±μ„ μ§€μ›ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” κ°œλ…μž…λ‹ˆλ‹€. 가상 ν•¨μˆ˜λŠ” κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ μ„ μ–Έλ˜κ³ , νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜λ  수 μžˆλŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 λ™μΌν•œ κΈ°λ³Έ 클래슀λ₯Ό 상속받은 μ—¬λŸ¬ 객체에 λŒ€ν•΄ λ‹€μ–‘ν•œ λ™μž‘μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

가상 ν•¨μˆ˜μ˜ νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • 가상 ν•¨μˆ˜λŠ” virtual ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έλ©λ‹ˆλ‹€. 이λ₯Ό 톡해 νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • κΈ°λ³Έ 클래슀의 가상 ν•¨μˆ˜μ— λŒ€ν•΄μ„œλŠ” κΈ°λ³Έ λ™μž‘μ΄ μ œκ³΅λ©λ‹ˆλ‹€. μ΄λŠ” νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜μ§€ μ•Šμ€ κ²½μš°μ— μ μš©λ©λ‹ˆλ‹€.
  • 가상 ν•¨μˆ˜λŠ” 클래슀 λ‹€ν˜•μ„±μ˜ 핡심이며, λ‹€λ₯Έ 객체듀을 λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 있게 ν•΄μ€λ‹ˆλ‹€.
  • 가상 ν•¨μˆ˜λŠ” 동적 λ°”μΈλ”©μœΌλ‘œ μ²˜λ¦¬λ˜λ―€λ‘œ, μ‹€ν–‰ 쀑에 μ–΄λ–€ ν•¨μˆ˜κ°€ ν˜ΈμΆœλ μ§€λŠ” 객체의 μ‹€μ œ νƒ€μž…μ— 따라 κ²°μ •λ©λ‹ˆλ‹€.

가상 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μ£Όμš” μ΄μœ λŠ” λ‹€ν˜•μ„±κ³Ό μœ μ—°μ„±μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€. 가상 ν•¨μˆ˜λŠ” κΈ°λ³Έ 클래슀λ₯Ό ν¬ν•¨ν•˜λŠ” 객체λ₯Ό λ‹€λ£¨λŠ” μ½”λ“œλ₯Ό 더 μœ μ—°ν•˜κ²Œ λ§Œλ“€μ–΄ μ£Όκ³ , λ‹€λ₯Έ 객체듀을 λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ‘œ λ‹€λ£° 수 있게 ν•©λ‹ˆλ‹€.

가상 ν•¨μˆ˜λŠ” ν΄λž˜μŠ€κ°€ ν™•μž₯λ˜κ±°λ‚˜ 변경될 κ°€λŠ₯성이 μžˆλŠ” κ²½μš°μ— μœ μš©ν•©λ‹ˆλ‹€. κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ 기본적인 λ™μž‘μ„ μ œκ³΅ν•˜κ³ , νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή λ™μž‘μ„ μž¬μ •μ˜ν•¨μœΌλ‘œμ¨ 객체의 λ™μž‘μ„ λ‹€λ₯΄κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

가상 ν•¨μˆ˜λŠ” C++μ—μ„œ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심이며, λ‹€ν˜•μ„±κ³Ό μœ μ—°μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 데 ν•„μˆ˜μ μΈ μš”μ†Œμž…λ‹ˆλ‹€. 가상 ν•¨μˆ˜λ₯Ό μ˜¬λ°”λ₯΄κ²Œ ν™œμš©ν•˜λ©΄ ν™•μž₯ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있으며, 클래슀 계측 ꡬ쑰λ₯Ό μ‰½κ²Œ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

4. 순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀의 관계

순수 가상 ν•¨μˆ˜μ™€ 좔상 ν΄λž˜μŠ€λŠ” C++μ—μ„œ λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” κ΄€λ ¨λœ κ°œλ…μž…λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ 순수 가상 ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜λŠ” 클래슀둜, μΈμŠ€ν„΄μŠ€ν™”λ  수 μ—†μŠ΅λ‹ˆλ‹€. 이 두 가지 κ°œλ…μ€ 멀버 ν•¨μˆ˜μ— λŒ€ν•œ κΈ°λ³Έ λ™μž‘μ„ μ •μ˜ν•˜μ§€ μ•Šκ³ , νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ꡬ체적인 λ™μž‘μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜μ™€ 좔상 ν΄λž˜μŠ€μ— λŒ€ν•œ μ£Όμš” νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • 좔상 ν΄λž˜μŠ€λŠ” 순수 가상 ν•¨μˆ˜λ₯Ό ν•œ 개 이상 ν¬ν•¨ν•˜κ³ , μΈμŠ€ν„΄μŠ€ν™”λ  수 μ—†μŠ΅λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λŠ” virtual ν‚€μ›Œλ“œμ™€ = 0을 μ‚¬μš©ν•˜μ—¬ μ„ μ–Έλ˜λ©°, 좔상 클래슀의 μ •μ˜ λ‚΄μ—μ„œλŠ” κ΅¬ν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 좔상 ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ ν΄λž˜μŠ€λ“€μ—κ²Œ 곡톡적인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜κ³ , ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ꡬ체적인 λ™μž‘μ„ μ •μ˜ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
  • 순수 가상 ν•¨μˆ˜λŠ” νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•„μš”ν•œ λ™μž‘μ„ μž¬μ •μ˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. νŒŒμƒ ν΄λž˜μŠ€κ°€ 좔상 클래슀λ₯Ό μƒμ†λ°›μœΌλ©΄, ν•΄λ‹Ή ν΄λž˜μŠ€μ—μ„œ λͺ¨λ“  순수 가상 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • 좔상 ν΄λž˜μŠ€λŠ” 직접적인 μΈμŠ€ν„΄μŠ€ν™”κ°€ λΆˆκ°€λŠ₯ν•˜μ§€λ§Œ, 좔상 클래슀의 ν¬μΈν„°λ‚˜ μ°Έμ‘°λ₯Ό 톡해 νŒŒμƒ 클래슀의 객체λ₯Ό 가리킬 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•  수 있으며, κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•΄ λ‹€μ–‘ν•œ νŒŒμƒ 클래슀의 객체λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜μ™€ 좔상 ν΄λž˜μŠ€λŠ” 클래슀 계측 ꡬ쑰의 μΌλΆ€λ‘œ, 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ€‘μš”ν•œ μš”μ†Œμž…λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” κ³΅ν†΅λœ κΈ°λŠ₯을 가진 ν΄λž˜μŠ€λ“€μ„ λ¬Άμ–΄μ„œ μΌλ°˜ν™”ν•˜κ³ , 순수 가상 ν•¨μˆ˜λ₯Ό 톡해 νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή κΈ°λŠ₯을 κ΅¬μ²΄ν™”ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œ μž¬μ‚¬μš©κ³Ό μœ μ—°μ„±μ„ 높일 수 있으며, λ‹€μ–‘ν•œ 객체의 λ™μž‘μ„ λŒ€ν‘œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. 순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀의 μž₯점

순수 가상 ν•¨μˆ˜μ™€ 좔상 ν΄λž˜μŠ€λŠ” C++μ—μ„œ λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. μ΄λ“€μ˜ μ£Όμš” μž₯점은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  1. λ‹€ν˜•μ„±μ„ 지원: 순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄, λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” λ‹€μ–‘ν•œ νŒŒμƒ 클래슀의 객체λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ—°μ„±μ΄ 높아지며, λ‹€μ–‘ν•œ 객체의 λ™μž‘μ„ λŒ€ν‘œν•  수 있게 λ©λ‹ˆλ‹€.

  2. μ½”λ“œ ꡬ쑰화: 좔상 ν΄λž˜μŠ€λŠ” λΉ„μŠ·ν•œ νŠΉμ„± 및 κΈ°λŠ₯을 가진 ν΄λž˜μŠ€λ“€μ„ λ¬Άμ–΄μ„œ μΌλ°˜ν™”ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œλ₯Ό κ΅¬μ‘°ν™”ν•˜κ³ , 논리적인 계측 ꡬ쑰λ₯Ό ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” κ³΅ν†΅λœ νŠΉμ§•μ„ κ°€μ§€λŠ” ν΄λž˜μŠ€λ“€μ„ μΆ”μƒν™”ν•˜μ—¬ μ‰½κ²Œ 관리할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

  3. μΈν„°νŽ˜μ΄μŠ€ μ •μ˜: 좔상 ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€μ—μ„œλŠ” 순수 가상 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ³ , νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•¨μœΌλ‘œμ¨ μΈν„°νŽ˜μ΄μŠ€μ˜ λ™μž‘μ„ μ •μ˜ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‹€μ–‘ν•œ 객체듀을 νŠΉμ •ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 있게 λ©λ‹ˆλ‹€.

  4. μ˜€λ²„λΌμ΄λ”© κ°•μ œ: 좔상 ν΄λž˜μŠ€μ—μ„œλŠ” 순수 가상 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•¨μœΌλ‘œμ¨ νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μ˜€λ²„λΌμ΄λ”©ν•˜λ„λ‘ κ°•μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” κ°œλ°œμžκ°€ μ‹€μˆ˜λ‘œ ν•¨μˆ˜λ₯Ό λΉ λœ¨λ¦¬κ±°λ‚˜ κ΅¬ν˜„ν•˜μ§€ μ•ŠλŠ” 경우λ₯Ό λ°©μ§€ν•˜κ³ , μ½”λ“œμ˜ 일관성을 μœ μ§€ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€.

  5. 객체 생성 μ œν•œ: 좔상 ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ν™”λ  수 μ—†κΈ° λ•Œλ¬Έμ—, 좔상 클래슀 νƒ€μž…μ˜ 객체λ₯Ό μƒμ„±ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. μ΄λŠ” 좔상 클래슀λ₯Ό 톡해 κ°œλ°œμžκ°€ μ˜λ„ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ”°λ₯΄λŠ” 객체만 μƒμ„±λ˜λ„λ‘ 보μž₯ν•  수 있게 ν•©λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜μ™€ 좔상 ν΄λž˜μŠ€λŠ” λ‹€ν˜•μ„±κ³Ό μœ μ—°μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ€‘μš”ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. 이듀은 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ§€ λ³΄μˆ˜μ„±μ„ 높일 뿐만 μ•„λ‹ˆλΌ, 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 원칙 쀑 ν•˜λ‚˜μΈ 좔상화λ₯Ό μ‹€ν˜„ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€μ™€ 순수 가상 ν•¨μˆ˜λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜λ©΄, ν™•μž₯ κ°€λŠ₯ν•˜κ³  μœ μ—°ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. 순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀의 μž₯점

  • λ‹€ν˜•μ„±μ„ 지원

    순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄, λ‹€μ–‘ν•œ νŒŒμƒ 클래슀의 객체λ₯Ό λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ—°μ„±μ„ λ†’μ—¬μ€λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ—¬λŸ¬ λ„ν˜•μ„ μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” 좔상 클래슀둜 λ„ν˜• 클래슀λ₯Ό λ§Œλ“€κ³ , ν•΄λ‹Ή 좔상 클래슀의 νŒŒμƒ 클래슀둜 원, μ‚Όκ°ν˜•, μ‚¬κ°ν˜• 등을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 μ΄λŸ¬ν•œ λ„ν˜•λ“€μ„ λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ½”λ“œ ꡬ쑰화

    좔상 ν΄λž˜μŠ€λŠ” λΉ„μŠ·ν•œ νŠΉμ„±μ΄λ‚˜ κΈ°λŠ₯을 가진 ν΄λž˜μŠ€λ“€μ„ λ¬Άμ–΄μ„œ μΌλ°˜ν™”ν•  수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ ꡬ쑰화와 μœ μ§€ 보수λ₯Ό μ‰½κ²Œ ν•  수 있게 ν•΄μ€λ‹ˆλ‹€. 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ κ³΅ν†΅λœ 멀버 λ³€μˆ˜ 및 멀버 ν•¨μˆ˜λ₯Ό 가진 ν΄λž˜μŠ€λ“€μ„ 묢을 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 동물 클래슀λ₯Ό 좔상 클래슀둜 μ •μ˜ν•˜κ³ , κ·Έ ν•˜μœ„λ‘œ 개, 고양이, μƒˆ λ“±μ˜ ν΄λž˜μŠ€λ“€μ„ λ§Œλ“€μ–΄ κ³΅ν†΅λœ 멀버 λ³€μˆ˜μ™€ 멀버 ν•¨μˆ˜λ₯Ό 상속받을 수 μžˆμŠ΅λ‹ˆλ‹€.

  • μΈν„°νŽ˜μ΄μŠ€ μ •μ˜

    좔상 ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€μ—μ„œλŠ” 순수 가상 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ³ , 이 ν•¨μˆ˜λ“€μ˜ κ΅¬ν˜„μ€ νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‹€μ–‘ν•œ 객체듀을 νŠΉμ •ν•œ μΈν„°νŽ˜μ΄μŠ€λ‘œ λ‹€λ£° 수 있게 λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 파일 μ‹œμŠ€ν…œμ„ λ‹€λ£¨λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 파일 및 ν΄λ”μ˜ 곡톡 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κ³ , ν•΄λ‹Ή 좔상 클래슀의 νŒŒμƒ 클래슀둜 μ‹€μ œ 파일 및 폴더 클래슀λ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ˜€λ²„λΌμ΄λ”© κ°•μ œ

    좔상 ν΄λž˜μŠ€μ—μ„œλŠ” 순수 가상 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•¨μœΌλ‘œμ¨ νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•˜λ„λ‘ κ°•μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžκ°€ μ‹€μˆ˜λ‘œ ν•¨μˆ˜λ₯Ό λΉ λœ¨λ¦¬κ±°λ‚˜ κ΅¬ν˜„ν•˜μ§€ μ•ŠλŠ” 경우λ₯Ό λ°©μ§€ν•˜κ³ , μ½”λ“œμ˜ 일관성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ νŠΉμ •ν•œ λ™μž‘μ„ κ΅¬ν˜„ν•˜μ§€ μ•Šμ€ μ±„λ‘œ 객체λ₯Ό μƒμ„±ν•˜λŠ” 것을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • 객체 생성 μ œν•œ

    좔상 ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ν™”λ  수 μ—†κΈ° λ•Œλ¬Έμ—, 좔상 클래슀 νƒ€μž…μ˜ 객체λ₯Ό μƒμ„±ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. μ΄λŠ” 좔상 클래슀λ₯Ό 톡해 κ°œλ°œμžκ°€ μ˜λ„ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ”°λ₯΄λŠ” 객체만 μƒμ„±λ˜λ„λ‘ 보μž₯ν•  수 있게 ν•©λ‹ˆλ‹€. λ”°λΌμ„œ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄, κ°œλ°œμžλŠ” 일반적으둜 좔상 클래슀λ₯Ό 상속받은 νŒŒμƒ 클래슀λ₯Ό 톡해 객체λ₯Ό μƒμ„±ν•˜κ²Œ λ©λ‹ˆλ‹€. μ΄λŠ” 객체의 생성을 μ œν•œν•˜μ—¬ μ˜λ„ν•˜μ§€ μ•Šμ€ 였브젝트의 생성을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜μ™€ 좔상 ν΄λž˜μŠ€λŠ” λ‹€ν˜•μ„±κ³Ό μœ μ—°μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. 이듀은 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ§€ λ³΄μˆ˜μ„±μ„ 높일 뿐만 μ•„λ‹ˆλΌ, 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 κ°œλ… 쀑 ν•˜λ‚˜μΈ 좔상화λ₯Ό μ‹€ν˜„ν•˜λŠ” 데 도움을 μ£ΌλŠ” κ°•λ ₯ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€μ™€ 순수 가상 ν•¨μˆ˜λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜λ©΄, μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1. 순수 가상 ν•¨μˆ˜

순수 가상 ν•¨μˆ˜λŠ” C++μ—μ„œ λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λŠ” ν•¨μˆ˜ μ„ μ–Έ μ‹œ "= 0"으둜 ν‘œμ‹œλ˜λ©°, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ‹€λ₯Έ 가상 ν•¨μˆ˜μ™€ 달리 순수 가상 ν•¨μˆ˜λŠ” κΈ°λ³Έ κ΅¬ν˜„μ„ κ°€μ§ˆ 수 μ—†μœΌλ©°, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜μ˜ μ£Όμš” νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • λ‹€ν˜•μ„± 지원

    순수 가상 ν•¨μˆ˜λ₯Ό 톡해 κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ νŒŒμƒν•œ λ‹€μ–‘ν•œ 클래슀의 객체λ₯Ό λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 핡심 λ„κ΅¬μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 동물 ν΄λž˜μŠ€μ—μ„œ 순수 가상 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ³ , 이λ₯Ό νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•˜μ—¬ 개, 고양이, 각쒅 동물 객체에 λŒ€ν•΄ λ™μΌν•œ λ™μž‘μ„ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • κ΅¬ν˜„ κ°•μ œ

    순수 가상 ν•¨μˆ˜λŠ” νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. λ”°λΌμ„œ νŒŒμƒ ν΄λž˜μŠ€λŠ” ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•ŠλŠ” 경우 컴파일 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. μ΄λŠ” κ°œλ°œμžκ°€ ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šκ³  μžŠμ–΄λ²„λ¦¬λŠ” μ‹€μˆ˜λ₯Ό λ°©μ§€ν•˜κ³ , μ½”λ”©μ˜ 일관성과 μ•ˆμ •μ„±μ„ λ†’μ΄λŠ” 데 도움을 μ€λ‹ˆλ‹€.

  • 좔상화λ₯Ό μœ„ν•œ 도ꡬ

    순수 가상 ν•¨μˆ˜μ™€ ν•¨κ»˜ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄, κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ νŒŒμƒν•œ 객체의 ν†΅μΌλœ λ™μž‘μ„ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” 순수 가상 ν•¨μˆ˜λ₯Ό ν•˜λ‚˜ 이상 κ°€μ§ˆ 수 있으며, 이λ₯Ό 톡해 κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ νŒŒμƒν•œ 객체듀이 λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Ό ν•  νŠΉμ •ν•œ λ™μž‘μ„ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 맀우 μœ μš©ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. 이λ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ—°μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 있으며, μ½”λ“œμ˜ 일관성과 μ•ˆμ •μ„±μ„ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€μ™€ ν•¨κ»˜ μ‚¬μš©λ˜λŠ” 순수 가상 ν•¨μˆ˜λŠ” μ½”λ“œλ₯Ό 보닀 κ΅¬μ‘°ν™”ν•˜κ³  μœ μ§€ κ΄€λ¦¬ν•˜κΈ° 쉽도둝 λ„μ™€μ€λ‹ˆλ‹€.

2. 좔상 클래슀

좔상 ν΄λž˜μŠ€λŠ” C++μ—μ„œ λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ 순수 가상 ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜λ©°, 객체λ₯Ό 직접 생성할 수 μ—†μŠ΅λ‹ˆλ‹€. νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή ν•¨μˆ˜λ“€μ„ κ΅¬ν˜„ν•˜μ—¬ 좔상 클래슀λ₯Ό 상속받은 객체λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

좔상 클래슀의 μ£Όμš” νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • 곡톡 μΈν„°νŽ˜μ΄μŠ€ μ •μ˜

    좔상 ν΄λž˜μŠ€λŠ” λΉ„μŠ·ν•œ νŠΉμ„±μ΄λ‚˜ κΈ°λŠ₯을 가진 ν΄λž˜μŠ€λ“€μ„ λ¬Άμ–΄μ„œ μΌλ°˜ν™”ν•  수 μžˆλŠ” λ„κ΅¬μž…λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€μ—μ„œλŠ” κ³΅ν†΅λœ 멀버 λ³€μˆ˜μ™€ 멀버 ν•¨μˆ˜λ₯Ό μ •μ˜ν•  수 있으며, 이λ₯Ό νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ 상속받아 ꡬ체적인 κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 좔상 ν΄λž˜μŠ€λŠ” λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 가진 객체λ₯Ό μƒμ„±ν•˜λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€.

  • 상속과 λ‹€ν˜•μ„± κ΅¬ν˜„

    좔상 ν΄λž˜μŠ€λŠ” λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. 좔상 클래슀λ₯Ό 상속받은 νŒŒμƒ ν΄λž˜μŠ€μ—μ„œλŠ” 좔상 클래슀의 순수 가상 ν•¨μˆ˜λ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‹€μ–‘ν•œ νŒŒμƒ 클래슀의 객체λ₯Ό κΈ°λ³Έ 클래슀 νƒ€μž…μœΌλ‘œ 닀루고, λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€ν˜•μ„±μ„ 지원할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • 객체 생성 μ œν•œ

    좔상 ν΄λž˜μŠ€λŠ” 객체λ₯Ό 직접 생성할 수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 좔상 클래슀 νƒ€μž…μ˜ 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•΄λ‹Ή 좔상 클래슀λ₯Ό 상속받은 νŒŒμƒ 클래슀의 객체λ₯Ό 생성해야 ν•©λ‹ˆλ‹€. μ΄λŠ” 객체의 생성을 μ œν•œν•˜μ—¬ 좔상 ν΄λž˜μŠ€κ°€ μ˜λ„ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ”°λ₯΄λŠ” 객체만 μƒμ„±λ˜λ„λ‘ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ½”λ“œ ꡬ쑰화

    좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ λΉ„μŠ·ν•œ νŠΉμ„±μ΄λ‚˜ κΈ°λŠ₯을 가진 ν΄λž˜μŠ€λ“€μ„ 묢을 수 μžˆμ–΄ μ½”λ“œμ˜ ꡬ쑰화와 μœ μ§€ λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” κ³΅ν†΅λœ 멀버 λ³€μˆ˜μ™€ 멀버 ν•¨μˆ˜λ₯Ό 가지고 있으며, 이λ₯Ό νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ μž¬μ‚¬μš©ν•˜κ±°λ‚˜ μΆ”κ°€ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

좔상 ν΄λž˜μŠ€λŠ” C++μ—μ„œ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό μ§€μ›ν•˜λ©°, μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ§€ λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, 좔상 ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κ³ , 객체 생성을 μ œν•œν•¨μœΌλ‘œμ¨ μ˜¬λ°”λ₯Έ μ‚¬μš©λ²•μ„ 보μž₯ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œμ˜ 일관성과 μœ μ—°μ„±μ„ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. 가상 ν•¨μˆ˜

가상 ν•¨μˆ˜λŠ” C++μ—μ„œ λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. 가상 ν•¨μˆ˜λŠ” κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ μ„ μ–Έλœ ν•¨μˆ˜λ₯Ό νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‹€μ–‘ν•œ 객체λ₯Ό λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 있으며, λŸ°νƒ€μž„μ— μ μ ˆν•œ ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜μ–΄ λ‹€ν˜•μ„±μ„ μ‹€ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

가상 ν•¨μˆ˜μ˜ μ£Όμš” νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • μž¬μ •μ˜ κ°€λŠ₯

    가상 ν•¨μˆ˜λŠ” κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ μ„ μ–Έλ˜μ§€λ§Œ, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 νŒŒμƒ ν΄λž˜μŠ€μ—μ„œλŠ” κΈ°λ³Έ 클래슀의 가상 ν•¨μˆ˜λ₯Ό μžμ‹ μ˜ λ…νŠΉν•œ λ°©μ‹μœΌλ‘œ μž¬μ •μ˜ν•˜κ±°λ‚˜ κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” λ‹€μ–‘ν•œ 객체듀을 λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” λ‹€ν˜•μ„±μ˜ 핡심 λ„κ΅¬μž…λ‹ˆλ‹€.

  • 동적 바인딩

    가상 ν•¨μˆ˜λŠ” λŸ°νƒ€μž„μ— 객체의 μ‹€μ œ νƒ€μž…μ— 따라 ν˜ΈμΆœλ©λ‹ˆλ‹€. ν˜ΈμΆœν•  ν•¨μˆ˜μ˜ μ£Όμ†ŒλŠ” λŸ°νƒ€μž„μ— κ²°μ •λ˜λ©°, 객체의 동적 νƒ€μž…μ— λ§žλŠ” ν•¨μˆ˜κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€. μ΄λŠ” λ‹€ν˜•μ„±μ„ μ‹€ν˜„ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 동적 바인딩을 κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

  • 가상 ν•¨μˆ˜ ν…Œμ΄λΈ”(Virtual Function Table)

    가상 ν•¨μˆ˜λŠ” 가상 ν•¨μˆ˜ ν…Œμ΄λΈ”, λ˜λŠ” vtable을 톡해 κ΅¬ν˜„λ©λ‹ˆλ‹€. 가상 ν•¨μˆ˜ ν…Œμ΄λΈ”μ€ 가상 ν•¨μˆ˜λ“€μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜λŠ” λ°°μ—΄λ‘œ, 객체의 포인터가 κ°€λ¦¬ν‚€λŠ” λ©”λͺ¨λ¦¬μ— μœ„μΉ˜ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 λŸ°νƒ€μž„μ— μ˜¬λ°”λ₯Έ 가상 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 있으며, λ‹€ν˜•μ„±μ„ μ‹€ν˜„ν•©λ‹ˆλ‹€.

  • 동적 λ‹€ν˜•μ„±

    가상 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 동적 λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 동적 λ‹€ν˜•μ„±μ€ 객체의 μ‹€μ œ νƒ€μž…μ— 따라 μ μ ˆν•œ λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 가상 ν•¨μˆ˜λ₯Ό 톡해 λ‹€μ–‘ν•œ 객체듀을 λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 있으며, 객체의 동적 νƒ€μž…μ— 따라 싀행될 ν•¨μˆ˜κ°€ κ²°μ •λ©λ‹ˆλ‹€.

가상 ν•¨μˆ˜λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. 가상 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 객체의 동적 νƒ€μž…μ— 따라 μ μ ˆν•œ ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜μ–΄ λ‹€ν˜•μ„±μ„ μ‹€ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ—°μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 있으며, λ‹€μ–‘ν•œ 객체듀을 λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€.

4. 순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀의 관계

순수 가상 ν•¨μˆ˜μ™€ 좔상 ν΄λž˜μŠ€λŠ” C++μ—μ„œ λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λŠ” 좔상 클래슀 λ‚΄μ—μ„œ μ„ μ–Έλ˜λ©°, ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ 순수 가상 ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜λ©°, 객체λ₯Ό 직접 생성할 수 μ—†μŠ΅λ‹ˆλ‹€. λŒ€μ‹ , 좔상 클래슀λ₯Ό 상속받은 νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜μ—¬ 좔상 클래슀 νƒ€μž…μ˜ 객체λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀의 κ΄€κ³„μ˜ μ£Όμš” νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • 순수 가상 ν•¨μˆ˜

    순수 가상 ν•¨μˆ˜λŠ” κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ μ„ μ–Έλ˜μ§€λ§Œ, κ΅¬ν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λŠ” "= 0;"으둜 μ„ μ–Έλ˜λ©°, μ΄λŠ” ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 λͺ…μ‹œμ μœΌλ‘œ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λŠ” νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λ₯Ό 가지고 μžˆλŠ” ν΄λž˜μŠ€λŠ” 좔상 ν΄λž˜μŠ€μž…λ‹ˆλ‹€.

  • 좔상 클래슀

    좔상 ν΄λž˜μŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ 순수 가상 ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” 객체λ₯Ό 직접 생성할 수 μ—†μœΌλ©°, 단지 κΈ°λ³Έ ν΄λž˜μŠ€λ‘œμ„œμ˜ 역할을 ν•©λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€μ—μ„œλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κ³  κ³΅ν†΅λœ κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 클래슀λ₯Ό 상속받은 νŒŒμƒ ν΄λž˜μŠ€μ—μ„œλŠ” 순수 가상 ν•¨μˆ˜λ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•˜μ—¬ 객체λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • μΈν„°νŽ˜μ΄μŠ€μ™€ λ‹€ν˜•μ„±

    좔상 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” λΉ„μŠ·ν•œ νŠΉμ„±μ΄λ‚˜ κΈ°λŠ₯을 가진 ν΄λž˜μŠ€λ“€μ„ λ¬Άμ–΄μ„œ μΌλ°˜ν™”ν•  수 μžˆλŠ” λ„κ΅¬λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€μ—μ„œλŠ” 순수 가상 ν•¨μˆ˜λ₯Ό 톡해 κ³΅ν†΅λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λ©°, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œλŠ” 이λ₯Ό κ΅¬ν˜„ν•˜μ—¬ 객체λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 가진 객체듀을 λ‹€μ–‘ν•œ νƒ€μž…μœΌλ‘œ λ‹€λ£° 수 있으며, λ‹€ν˜•μ„±μ„ μ‹€ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜μ™€ 좔상 ν΄λž˜μŠ€λŠ” C++μ—μ„œ λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ 순수 가상 ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜λ©°, ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•ŠκΈ° μœ„ν•΄ 순수 가상 ν•¨μˆ˜λ‘œ μ„ μ–Έλ©λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€μ–‘ν•œ 객체λ₯Ό λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 있으며, μ½”λ“œμ˜ ꡬ쑰화와 μž¬μ‚¬μš©μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

5. 순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀의 μž₯점

순수 가상 ν•¨μˆ˜μ™€ 좔상 ν΄λž˜μŠ€λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀의 μ‚¬μš©μ€ λ‹€μŒκ³Ό 같은 μ—¬λŸ¬ 가지 μž₯점을 μ œκ³΅ν•©λ‹ˆλ‹€:

  • λ‹€ν˜•μ„± κ΅¬ν˜„

    좔상 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ 순수 가상 ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜λ©°, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ 이λ₯Ό κ΅¬ν˜„ν•¨μœΌλ‘œμ¨ λ‹€μ–‘ν•œ νƒ€μž…μ˜ 객체λ₯Ό λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ—°μ„±μ„ ν–₯μƒμ‹œν‚€λŠ”λ° 도움을 μ€λ‹ˆλ‹€.

  • μΈν„°νŽ˜μ΄μŠ€ μ •μ˜

    좔상 ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€μ—λŠ” 순수 가상 ν•¨μˆ˜λ₯Ό 톡해 κ³΅ν†΅λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λ©°, 이λ₯Ό μƒμ†λ°›λŠ” ν΄λž˜μŠ€λ“€μ€ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œμ˜ 일관성과 ꡬ쑰화λ₯Ό μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 좔상화

    좔상 ν΄λž˜μŠ€λŠ” 일뢀 κΈ°λŠ₯이 κ΅¬ν˜„λ˜μ§€ μ•Šμ€ μƒνƒœλ‘œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 좔상 ν΄λž˜μŠ€λŠ” 객체λ₯Ό 직접 생성할 수 μ—†μœΌλ©°, 단지 κΈ°λ³Έ ν΄λž˜μŠ€λ‘œμ„œ 역할을 ν•©λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” λΉ„μŠ·ν•œ νŠΉμ„±μ΄λ‚˜ κΈ°λŠ₯을 가진 ν΄λž˜μŠ€λ“€μ„ λ¬Άμ–΄μ„œ μΌλ°˜ν™”ν•  수 μžˆλŠ” λ„κ΅¬λ‘œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μœ μ—°ν•œ 섀계

    좔상 ν΄λž˜μŠ€μ™€ 순수 가상 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 객체의 ꡬ쑰화와 μœ μ—°μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€μ™€ κ΅¬ν˜„μ„ 뢄리할 수 있으며, 순수 가상 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μ–‘ν•œ νƒ€μž…μ˜ 객체λ₯Ό λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ ν™•μž₯μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚€λŠ”λ° 도움을 μ€λ‹ˆλ‹€.

순수 가상 ν•¨μˆ˜μ™€ 좔상 ν΄λž˜μŠ€λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ‹€ν˜•μ„±κ³Ό 좔상화λ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 μ€‘μš”ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. 이듀은 λ‹€μ–‘ν•œ 객체λ₯Ό λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‹€λ£° 수 μžˆλŠ” λ‹€ν˜•μ„±μ„ μ œκ³΅ν•˜λ©°, 좔상화λ₯Ό 톡해 객체의 ꡬ쑰화와 μΌλ°˜ν™”λ₯Ό λ„μ™€μ€λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜μ™€ 좔상 클래슀의 μ‚¬μš©μ€ μœ μ—°ν•œ 섀계와 높은 μž¬μ‚¬μš©μ„±μ„ μ‹€ν˜„ν•˜λŠ”λ° 큰 μž₯점을 μ œκ³΅ν•©λ‹ˆλ‹€.

λŒ“κΈ€