티스토리 뷰
반응형
반응형
C++ 오버로딩 vs 오버라이딩 – 헷갈리지 말고 딱 정리하자
C++을 공부하다 보면 **오버로딩(overloading)**과 **오버라이딩(overriding)**이라는 낯선 단어를 만나게 됩니다.
이름은 비슷한데, 실제로는 하는 일이 완전히 다릅니다.
이 글에서는 두 개념을 쉽게 비교하면서, 언제 어떻게 쓰는지를 딱 정리해보겠습니다.
오버로딩 (Overloading) – 같은 이름, 다른 입력
오버로딩은 같은 이름의 함수를 여러 개 만들되, 매개변수를 다르게 만드는 것을 말합니다.
class Printer {
public:
void print(int x) {
cout << "정수: " << x << endl;
}
void print(string s) {
cout << "문자열: " << s << endl;
}
};
이렇게 하면 print() 함수는 입력값의 타입에 따라 다른 버전이 호출됩니다.
Printer p;
p.print(10); // 정수: 10
p.print("Hello"); // 문자열: Hello
🔹 정리: 오버로딩은 함수 이름은 같지만, 매개변수가 다르면 OK입니다.
🔹 쓰는 이유: 다양한 입력값에 맞게 하나의 동작 이름을 통일하고 싶을 때.
오버라이딩 (Overriding) – 부모의 함수를 자식이 바꿔쓰기
오버라이딩은 상속받은 자식 클래스가, 부모 클래스의 함수를 자기 방식으로 다시 정의하는 걸 말합니다.
이건 **다형성(polymorphism)**과 깊이 연결돼 있습니다.
먼저 부모 클래스:
class Animal {
public:
virtual void speak() {
cout << "동물이 말합니다." << endl;
}
};
그리고 자식 클래스:
class Dog : public Animal {
public:
void speak() {
cout << "멍멍!" << endl;
}
};
이제 포인터를 통해 함수를 호출해봅니다.
Animal* a = new Dog();
a->speak(); // 결과는?
결과:
멍멍!
🔹 정리: 오버라이딩은 자식이 부모의 가상 함수를 같은 이름, 같은 매개변수로 덮어써서 실행되게 만듭니다.
🔹 쓰는 이유: 상속받은 함수를 자기 방식으로 바꾸고 싶을 때.
🔹 조건: 부모 함수는 반드시 virtual이어야 합니다.
표 하나로 비교하자
구분 오버로딩 (Overloading) 오버라이딩 (Overriding)
사용 위치 | 같은 클래스 안 | 부모-자식 클래스 사이 |
이름 | 같음 | 같음 |
매개변수 | 다름 | 같음 |
virtual 필요 | ❌ 필요 없음 | ✅ 부모는 virtual이어야 함 |
동작 시점 | 컴파일 시 결정 | 실행 시 결정 |
관련 개념 | 편의성 | 다형성 |
헷갈릴 땐 이렇게 외우세요
- 🟦 오버로딩은 매개변수를 바꿔서 같은 이름을 여러 번 쓰는 것
→ “과적재”: 기능을 더 얹는다 - 🟩 오버라이딩은 상속받은 함수를 바꿔치기 하는 것
→ “재정의”: 기존 걸 덮어쓴다
실제 예시로 다시 복습
오버로딩
void greet() {
cout << "Hello!" << endl;
}
void greet(string name) {
cout << "Hello, " << name << "!" << endl;
}
greet(); // Hello!
greet("Alice"); // Hello, Alice!
오버라이딩
class Parent {
public:
virtual void sayHi() {
cout << "부모 인사" << endl;
}
};
class Child : public Parent {
public:
void sayHi() {
cout << "자식 인사" << endl;
}
};
Parent* p = new Child();
p->sayHi(); // 자식 인사
마무리 요약
개념 핵심 요약
오버로딩 | 같은 함수 이름, 다른 매개변수로 여러 버전 만듦 |
오버라이딩 | 상속받은 함수를 자식이 다시 정의함 (virtual 필요) |
이제 이 둘의 차이가 명확해졌나요?
혼란이 왔을 때는 꼭,
- 오버로딩은 “같은 이름, 다른 인자”
- 오버라이딩은 “상속 + virtual + 덮어쓰기”
이렇게 딱딱 구분해서 기억하시면 됩니다.
반응형
'프로그래밍 > 홍정모의 따라배우는 C++' 카테고리의 다른 글
포인터의 타입은 왜 있는가? (0) | 2025.04.27 |
---|---|
C++에서 final 키워드란 무엇인가? (0) | 2025.04.27 |
가상 함수(virtual function) (0) | 2025.04.04 |
다형성(polymorphism) (0) | 2025.04.04 |
클래스에서 멤버변수 접근 ( . 과 ->의 차이점) (0) | 2025.04.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코딩테스트
- 백준
- 류근관
- 뇌와행동의기초
- K-MOOC
- 열혈프로그래밍
- 심리학
- 보세사
- 인프런
- 통계
- stl
- 회계
- 윤성우
- 오블완
- 사회심리학
- 일문따
- 여인권
- 파이썬
- C
- 일본어
- 데이터분석
- 정보처리기사
- C/C++
- 인지부조화
- c++
- Python
- 일본어문법무작정따라하기
- 강화학습
- 티스토리챌린지
- 통계학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형