객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체(Object)라는 독립된 단위로 나누어 설계하는 방법이다.
각 객체는 속성(데이터, 변수)과 행동(메서드, 함수)을 가지고 있으며, 서로 메시지를 주고받으며 협력한다.
1.1 추상화 (Abstraction)
: 복잡한 시스템에서 핵심 개념만 뽑아내어 단순화한다.
- 적용 영역: 소프트웨어 설계, 객체지향 프로그래밍
- 목적: 불필요한 세부사항을 감추고, 본질적인 특징에 집중.
1.2 가상화 (Virtualization)
: 실제 물리 자원을 추상화된 형태로 나누거나 합쳐서 가상의 자원으로 제공하는 기술.
- 적용 영역: 컴퓨터 시스템, 인프라, 운영체제, 클라우드
- 목적: 자원의 효율적 활용, 격리, 유연한 확장성 확보.
3.1 업캐스팅(Upcasting)
: 자식 클래스 객체를 부모 클래스 타입으로 변환하는 것
- 자동 변환(implicit)가능
- 가상 함수 사용 시 자식 클래스의 메서드가 호출됨(다형성 활용)
3.2 다운캐스팅(Downcasting)
: 부모 클래스 타입을 자식 클래스 타입으로 변환하는 것
- 명시적 변환(explicit)필요
- 부모 타입 포인터가 실제로 자식 객체를 가리키지 않으면 런타임 오류 발생한다.
3.3 dynamic_cast
: 런타임에 실제 객체의타입을 검사하여, 안전한 다운캐스팅을 보장하는 C++ 연산자
- 전제 조건 : 부모 클래스에 가상함수(virtual)가 있어사 RTTI(Run-Time Type Infomation)가 활성화됨.
예시) 자동차 예시