하나의 클래스가 다른 클래스를 기반으로 확장하면서 기능을 물려받고 새로운 기능을 추가하는 것.
타입(클래스, 구조체, 열거형 등)이 특정 기능이나 행동 규약을 따르도록 강제하는 것.
| 항목 | 상속 (Inheritance) | 프로토콜 (Protocol) |
|---|---|---|
| 적용 대상 | 클래스만 가능 | 클래스, 구조체, 열거형 모두 가능 |
| 기능 공유 방법 | 부모 클래스로부터 속성과 메서드 상속 | 특정 기능을 규약화하여 구현 |
| 다중 적용 가능성 | ❌ 다중 상속 불가 | ✅ 다중 프로토콜 채택 가능 |
| 기본 구현 공유 | ✅ 상위 클래스에 구현 포함 | ✅ 프로토콜 + extension 으로 가능 |
| 결합도 | 높음 (강한 결합) | 낮음 (유연함, 느슨한 결합) |
| 기본 사용 시기 | 공통 속성과 로직을 공유하는 경우 | 특정 기능(역할)을 지정하고 구현을 강제할 때 |
• 상속은 “나는 무엇이다” (is-a):
→ Dog는 Animal이다
→ 공통 속성, 기본 동작을 공유할 때 사용
• 프로토콜은 “나는 이런 기능을 할 수 있다” (can-do):
→ Cat은 SoundMaking을 할 수 있다
→ 역할, 행동 위주의 기능 부여 시 사용