C++ 객체지향 문법: 상속, 캡슐화, 다형성
1. 캡슐화 (Encapsulation)
데이터와 함수를 하나로 묶고, 외부에서 내부 데이터를 직접 접근하지 못하게 막는 방식
접근 지정자 private
, public
, protected
로 구분함
class BankAccount {
private:
int balance; // 외부 접근 불가
public:
void deposit(int amount) {
balance += amount;
}
int getBalance() {
return balance;
}
};
캡슐화를 통해 데이터 보호 및 함수 중심의 접근 유도 가능
2. 상속 (Inheritance)
기존 클래스(부모 클래스)의 속성과 기능을 물려받아 새로운 클래스(자식 클래스)를 정의할 수 있음
class Animal {
public:
void eat() {
cout << "먹는다" << endl;
}
};
class Dog : public Animal {
public:
void bark() {
cout << "멍멍" << endl;
}
};
Dog
는 Animal
의 모든 public 함수를 사용할 수 있음
접근 수준 정리
지정자 | 자식 클래스에서 접근 | 외부에서 접근 |
---|---|---|
public | O | O |
protected | O | X |
private | X | X |
3. 다형성 (Polymorphism)
같은 이름의 함수라도 객체의 종류에 따라 다르게 동작하도록 만드는 개념
대표적으로 가상 함수(virtual)를 통해 구현함
class Animal {
public:
virtual void sound() {
cout << "동물 소리" << endl;
}
};
class Cat : public Animal {
public:
void sound() override {
cout << "야옹" << endl;
}
};
class Dog : public Animal {
public:
void sound() override {
cout << "멍멍" << endl;
}
};
void playSound(Animal* a) {
a->sound(); // 실제 객체 타입에 따라 다른 소리
}
Animal*
타입으로 받아도 virtual
덕분에 실제 객체의 오버라이딩된 함수가 호출됨 → 런타임 다형성
4. 요약
- 캡슐화: 접근 지정자를 사용해 데이터 보호함
- 상속: 기존 클래스를 확장하거나 재사용함
- 다형성: 같은 함수 이름이 객체 종류에 따라 다르게 동작함 (virtual/override)
객체지향 프로그래밍(OOP)의 핵심은 "유지보수 쉬운 확장 가능한 구조" 만들기임
'코딩 > c++' 카테고리의 다른 글
C++ 기본 문법(7) (0) | 2025.06.02 |
---|---|
C++ 기본 문법(6) (0) | 2025.06.02 |
C++ 기본 문법(5) (0) | 2025.06.02 |
C++ 기본 문법(4) (0) | 2025.06.02 |
C++ 기본 문법(3) (0) | 2025.06.02 |