본문 바로가기
🚀 데브 노트 (IT 지식 & 팁)

오버로딩과 오버라이딩의 차이, '자판기와 맛집 레시피' 비유로 3분 만에 완벽 정리!

by 데브프리 2026. 6. 21.

안녕하세요, 여러분의 든든한 IT 길잡이 데브프리입니다.

 

자바(Java)나 C++ 같은 객체지향 언어를 공부하다 보면, 이름이 너무 비슷해서 우리를 혼란에 빠뜨리는 쌍둥이 악당(?)을 만나게 됩니다. 바로 오버로딩(Overloading)과 오버라이딩(Overriding)입니다.

 

"이름만 비슷하지 완전히 다른 개념입니다!"라고 책에는 쓰여있지만, 막상 면접관이 "둘의 차이점이 뭐죠?"라고 물어보면 머릿속에서 두 단어가 뒤엉켜 말문이 막히곤 합니다.

 

하지만 걱정하지 마세요! 오늘 이 글을 끝까지 읽으신다면, 일상생활의 재미있는 비유를 통해 이 둘을 완벽하게 구분하고 면접에서도 자신 있게 대답하실 수 있을 겁니다. 바로 시작합니다!

 

1. 오버로딩(Overloading): "재료는 달라도 기능은 하나!" (자판기 만능 버튼)

오버로딩(Overloading)의 사전적 의미는 '과적하다, 많이 싣다'입니다. 프로그래밍에서는 '같은 이름의 메서드(기능)를 여러 개 중복해서 만드는 것'을 뜻합니다. 단, 조건이 있습니다. 이름은 같아도 매개변수(들어가는 재료)의 개수나 타입이 달라야 합니다.

오버로딩 Overloading 매개변수 다형성 비유
오버로딩은 동전이든 카드든 다 받아주는 자판기의 '결제하기' 만능 버튼과 같습니다.

일상생활에 비유하자면 오버로딩은 '자판기의 결제 버튼'입니다.

우리가 자판기에서 음료수를 뽑을 때, 동전을 넣든, 1천 원짜리 지폐를 넣든, 신용카드를 꽂든 모두 '결제'라는 동일한 목적의 기능이 작동합니다.

  • 결제하기(동전)
  • 결제하기(지폐)
  • 결제하기(신용카드)

이름은 모두 결제하기로 똑같지만, 안에 들어가는 재료(매개변수)가 다릅니다. 개발자가 굳이 동전결제하기(), 카드결제하기()처럼 이름을 귀찮게 여러 개 만들 필요 없이, 결제하기()라는 이름 하나로 통일해서 쓸 수 있게 해주는 아주 편리한 문법이 바로 오버로딩입니다.

 

2. 오버라이딩(Overriding): "부모의 것을 내 입맛대로 덮어쓰기!" (맛집 레시피)

반면 오버라이딩(Overriding)의 사전적 의미는 '기각하다, 무시하고 덮어쓰다'입니다. 프로그래밍에서는 '부모 클래스에게 물려받은 메서드(기능)를 자식 클래스에서 완전히 새롭게 재정의(덮어쓰기) 하는 것'을 뜻합니다.

오버라이딩 Overriding 상속과 재정의 비유
오버라이딩은 부모에게 물려받은 낡은 레시피를 자식의 스타일로 새롭게 덮어쓰는(재정의) 것과 같습니다.

일상생활에 비유하자면 오버라이딩은 '가업 승계 2대째 맛집의 레시피 업그레이드'입니다.

아들이 부모님의 국밥집을 물려받았습니다(상속). 부모님의 국밥만들기()라는 기술을 그대로 쓸 수도 있지만, 아들은 요즘 사람들의 입맛에 맞춰서 캡사이신을 추가한 매운 국밥으로 레시피를 바꾸고 싶어 합니다.

 

이때, 기술의 이름인 국밥만들기()는 부모님의 것과 똑같이 그대로 사용하지만, 그 안의 요리 과정(내부 로직)만 자식의 입맛대로 싹 뜯어고치는 것(재정의)이 바로 오버라이딩입니다. 부모의 기존 방식은 무시되고(덮어써지고), 자식이 새롭게 만든 방식으로 기능이 작동하게 됩니다.

 

3. 한눈에 비교하는 요약표

비교 항목 오버로딩 (Overloading) 오버라이딩 (Overriding)
비유하자면? 동전, 카드 다 되는 '자판기 만능 버튼' 부모님 레시피 업그레이드 '덮어쓰기'
발생 위치 같은 클래스 내부에서 발생 부모와 자식 간의 상속 관계에서 발생
메서드 이름 같아야 함 같아야 함
매개변수 (재료) 달라야 함 (개수나 타입이 달라야 성립) 완벽히 같아야 함 (재료까지 똑같이 물려받음)
리턴 타입 (결과) 달라도 상관없음 같아야 함
핵심 목적 이름 하나로 여러 종류의 입력을 처리하기 위해 부모의 기능을 자식 상황에 맞게 수정하기 위해

 

마무리

정리해 볼까요?

  • 같은 공간 안에서 이름만 같고 재료가 다르면 오버로딩 (새로 만들기)
  • 부모에게 물려받은 것을 속 내용만 내 입맛대로 바꾸면 오버라이딩 (덮어쓰기)

이 두 가지 개념은 자바의 다형성(Polymorphism)을 실현하는 가장 중요한 뼈대입니다. 특히 우리가 스프링(Spring) 프레임워크나 JPA를 사용할 때 무의식적으로 부모 클래스의 기능을 입맛에 맞게 '오버라이딩(Override)'하여 사용하는 경우가 정말 많습니다.

 

이제 면접관이 질문을 던진다면, 당황하지 말고 자판기와 맛집 레시피를 떠올리며 자신 있게 대답해 보세요!

 

오늘의 데브 노트가 유익하셨다면 공감과 댓글 부탁드립니다. 다음 시간에도 초보 개발자들의 머리를 아프게 하는 헷갈리는 IT 지식을 쉽고 명쾌하게 가져오겠습니다. 지금까지 데브프리였습니다. 감사합니다!