태그: 다형성
10편
-
C++ 현대적 다형성 설계: 상속 대신 합성·variant
dynamic_cast가 늘어나는 이벤트 시스템이나 여러 결제 수단처럼 상속이 부담스러워지는 경우를 합성과 std::variant로 다시 설계하는 방법을 보여줍니다. overloaded 헬퍼와 std::visit, 설계 선택 흐름, bad_variant_access 같은 에러도 다룹니다.
-
C++ 가상 함수 현장 매뉴얼 | 설계·비용·override·실무 패턴 한글 정리
가상 함수를 언제 쓰고 언제 템플릿으로 대체할지, override/final로 실수를 줄이는 법, 다형 호출 비용과 캐시 친화 설계까지. 현업에서 바로 적용 가능한 체크리스트와 안티패턴을 정리합니다.
-
C++ 가상 소멸자가 없을 때 생기는 누수: virtual·protected 소멸자 선택 기준
기반 클래스 포인터로 파생 객체를 delete했는데 파생 소멸자가 불리지 않아 메모리와 파일 핸들이 새는 이유를 보여주고, virtual 소멸자, 순수 가상 소멸자, protected 소멸자 중 언제 무엇을 쓰는지와 vtable 오버헤드를 설명합니다.
-
C++ 객체 슬라이싱 에러: vector<Base>에 담을 때 잘리는 이유와 clone 패턴
파생 객체를 기반 클래스 값으로 넘기거나 vector<Base>에 담는 순간 파생 멤버와 가상 함수 동작이 잘려 나가는 슬라이싱이 왜 생기는지 보여주고, 참조·스마트 포인터·clone() 패턴과 복사 생성자 delete로 막는 법을 다룹니다.
-
C++ 가상 함수와 vtable: 호출 비용, Devirtualization, CRTP 대안
가상 함수 호출이 vtable과 vptr을 거쳐 결정되는 과정을 메모리 레이아웃과 다이어그램으로 설명하고, 가상 소멸자가 없을 때 생기는 문제를 코드로 보여줍니다. 기본 인자, 생성자 안 가상 호출, 객체 슬라이싱 같은 실수와 devirtualization·CRTP 대안도 다룹니다.
-
C++ 가상 함수 심화 가이드 | vtable·vptr, 가상 상속, 추상 클래스, 가상 소멸자
C++ 가상 함수가 런타임에 올바른 오버라이드를 호출하는 원리(vtable·vptr), override와 final, 순수 가상 함수와 추상 클래스, 가상 소멸자, 다이아몬드 상속을 예제로 설명하고, 생성자 안의 가상 호출·기본 인자·이름 가림 같은 함정을 짚습니다.
-
C++ 객체 슬라이싱: 파생 부분이 잘려 나가는 네 가지 경우와 다형성 지키는 법
파생 객체를 기반 클래스 값으로 넘기거나 반환하고, 대입하거나 vector에 담는 네 가지 경우에 파생 부분이 잘려 나가는 이유를 메모리 레이아웃으로 보여주고, 참조·포인터·스마트 포인터와 복사 방지로 다형성을 지키는 법을 설명합니다.
-
C++ 상속과 다형성: virtual 함수, 추상 클래스, 가상 소멸자 누락과 슬라이싱
C++의 상속(Inheritance)과 다형성(Polymorphism)을 게임 캐릭터·결제 시스템 예제로 정리합니다. virtual 함수, 순수 가상 함수, 가상 소멸자 누락과 슬라이싱 같은 실무에서 자주 겪는 함정을 다룹니다.
-
C++ CRTP: 가상 함수 없이 정적 다형성 구현하기와 C++23 deducing this
C++ CRTP(Curiously Recurring Template Pattern)로 가상 함수 없이 정적 다형성을 구현하는 방법을 카운터 믹스인, 비교 연산자 자동 생성, 싱글톤, 체이닝 인터페이스 예제로 정리합니다. 가상 함수와의 성능 비교와 캐스팅·순환 의존 함정까지 다룹니다.
-
[Go 2주 완성 #04] Day 7: 다형성의 재해석, 인터페이스 - 가상 함수 없이 다형성 구현하기
implements 선언 없이 메서드만 구현하면 인터페이스를 만족하는 Go의 암시적 인터페이스를 C++ 가상 함수와 비교합니다. io.Reader·io.Writer·fmt.Stringer·error 같은 표준 인터페이스, any와 타입 단언, 타입 스위치, 작은 인터페이스 설계 원칙을 다룹니다.