Post

Q.바인딩

### Q. 바인딩?

답변 보기 프로그램 내에서 특정 이름(변수, 함수, 객체 등)과 해당 이름이 참조하는 실제 메모리 위치 또는 실행코드를 연결하는 과정입니다.

### Q. 정적바인딩과 동적바인딩?

답변 보기 정적 바인딩은 컴파일 타임에 호출 대상이 결정되어 성능과 최적화에 유리하고, 동적 바인딩은 런타임 다형성을 제공해 확장성과 유지보수성이 좋지만, 가상 함수 호출 비용과 최적화 제약이 있습니다.

+ `final` → 동적 바인딩이지만 정적 바인딩처럼 최적화 가능

동적바인딩은 virtual화 하여 오버라이딩을 하면 참조된 인스턴스의 실제 데이터 클래스 형에 따라 재정의 된 함수가 호출됩니다. | 구분 | 정적 바인딩 | 동적 바인딩 | | --------- | ---------------- | --------------- | | 결정 시점 | 컴파일 타임 | 런타임 | | 구현 방식 | 직접 호출 | vtable 기반 | | 다형성 | X | O | | 성능 | 빠름 | 상대적으로 느림 | | 인라이닝 | 가능 | 제한적 | | 유연성 | 낮음 | 높음 | | 유지보수 | 구조 변경에 취약 | 확장에 강함 |

### Q. 동적바인딩의 장단점?

답변 보기 동적바인딩은 다형성을 통해 확장성과 유지보수성을 높이지만, 가상 함수 호출 비용과 최적화 제약으로 인해 성능이 중요한 구간에서는 신중히 사용해야 합니다.

장점
- 다형성 지원:부모 타입 포인터/참조로 자식 객체를 다룰 수 있어, 코드의 유연성과 확장성이 높아집니다.
- 유지보수성 향상: 새로운 파생 클래스를 추가해도 기존 로직을 수정하지 않고 기능 확장이 가능합니다 (OCP)

단점
- 성능 오버헤드: 가상 함수 호출 시 vtable 탐색이 필요하여 정적 바인딩보다 호출 비용이 증가합니다.
- 인라이닝 제한: 컴파일 타임에 호출 대상이 확정되지 않아 함수 인라이닝이 어렵습니다->최적화에 불리
- 디버깅 난이도: 실체 호출되는 함수가 런타임에 결정되므로 호출 흐름을 추적하기가 상대적으로 어렵습니다.

UI, 상태 전환, 이벤트 처리, FSM 상태 클래스 등의 경우에는 동적바인딩을 사용해도 괜찮지만, 렌더링 루프, 물리 계산 등 대량 반복 호출의 경우 피하는 것이 좋습니다.

---
생성된 객체 기준이지, 자료형이 기준이 아니다. 누구의 주소냐가 중요하다.
```cpp CObj* pObj = new CObj; // 부모의 vptr CObj* pObj = new CPlayer; // 자식의 vptr ``` 자료형은 포인터 CObj* 이지만 주소는 CPlayer이기 때문에
This post is licensed under CC BY 4.0 by the author.