[기술면접/C,C++] 객체지향 프로그래밍(OOP)

김현아·2025년 8월 27일

기술면접

목록 보기
4/14

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체(Object)라는 독립된 단위로 나누어 설계하는 방법이다.
각 객체는 속성(데이터, 변수)과 행동(메서드, 함수)을 가지고 있으며, 서로 메시지를 주고받으며 협력한다.

핵심개념(4대원칙)

  1. 추상화(Abstraction)
  • 복잡한 시스템에서 핵심적인 개념만 뽑아내는 것

추상화vs가상화

1.1 추상화 (Abstraction)
: 복잡한 시스템에서 핵심 개념만 뽑아내어 단순화한다.
- 적용 영역: 소프트웨어 설계, 객체지향 프로그래밍
- 목적: 불필요한 세부사항을 감추고, 본질적인 특징에 집중.

1.2 가상화 (Virtualization)
: 실제 물리 자원을 추상화된 형태로 나누거나 합쳐서 가상의 자원으로 제공하는 기술.
- 적용 영역: 컴퓨터 시스템, 인프라, 운영체제, 클라우드
- 목적: 자원의 효율적 활용, 격리, 유연한 확장성 확보.

  1. 캡슐화(Encapsulation)
  • 데이터(속성)와 이를 처리하는 메서드를 하나로 묶고, 외부에서 직접 접근하지 못하게 보호하는 것.
  1. 상속(Inheritance)
  • 기존 클래스(부모)의 속성과 메서드를 자식 클래스가 물려받아 재사용 한다.

3.1 업캐스팅(Upcasting)
: 자식 클래스 객체를 부모 클래스 타입으로 변환하는 것
- 자동 변환(implicit)가능
- 가상 함수 사용 시 자식 클래스의 메서드가 호출됨(다형성 활용)

3.2 다운캐스팅(Downcasting)
: 부모 클래스 타입을 자식 클래스 타입으로 변환하는 것
- 명시적 변환(explicit)필요
- 부모 타입 포인터가 실제로 자식 객체를 가리키지 않으면 런타임 오류 발생한다.

3.3 dynamic_cast
: 런타임에 실제 객체의타입을 검사하여, 안전한 다운캐스팅을 보장하는 C++ 연산자
- 전제 조건 : 부모 클래스에 가상함수(virtual)가 있어사 RTTI(Run-Time Type Infomation)가 활성화됨.

예시) 자동차 예시

  • 자동차(부모) 클래스 -> 스포츠카(자식) 클래스
  • 스포츠카를 자동차로 보는 건 항상 안전(업캐스팅)
  • 자동차를 무조건 스포츠카라고 단정짓는 건 위험(다운캐스팅)
  • dynamic_cast는 "이 자동차가 진짜 스포츠카 맞아?"하고 확인해주는 안전벨트 역할
  1. 다형성(Polymorphism)
  • 같은 이름의 메서드가 객체의 따라 다르게 동작하는 것.

사용이유

  • 코드 재사용성 ↑ (상속)
  • 유지보수성 ↑ (캡슐화)
  • 확장성 ↑ (다형성)
  • 가독성 ↑ (추상화)

0개의 댓글