728x90
반응형
SMALL
안녕하세요! 😊 Java에서 자주 헷갈리는 오버로딩(Overloading)과 오버라이딩(Overriding)에 대해 쉽게 설명드릴게요. 이 두 개념은 자바 메서드의 활용과 관련이 있지만, 서로 다른 상황에서 사용되며 의미도 다릅니다. 차근차근 이해해보아요! 💪
오버로딩 (Overloading)
1. 정의
오버로딩은 같은 이름의 메서드를 매개변수의 타입이나 개수를 다르게 정의하는 것입니다.
즉, 하나의 클래스 내에서 같은 이름의 메서드를 여러 번 정의할 수 있습니다.
특징
- 메서드 이름은 같아야 합니다.
- 매개변수의 개수나 타입이 달라야 합니다.
- 반환값의 타입은 오버로딩에 영향을 주지 않습니다.
예시 코드
class Calculator {
// 메서드 오버로딩
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(3, 4)); // 7
System.out.println(calc.add(3.5, 4.5)); // 8.0
System.out.println(calc.add(1, 2, 3)); // 6
}
}
요약
- 언제? 메서드 이름은 같게 유지하면서 다양한 매개변수 조합을 처리하고 싶을 때.
- 어디에서? 같은 클래스 내부에서 사용.
오버라이딩 (Overriding)
1. 정의
오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것입니다.
즉, 부모로부터 상속받은 메서드의 기능을 덮어씌우는 것입니다.
특징
- 메서드 이름, 매개변수, 반환 타입 모두 부모 클래스와 동일해야 합니다.
- 부모 클래스의 접근 제어자보다 더 좁은 범위로 변경할 수 없습니다. (예:
protected
→private
불가) - @Override 어노테이션을 붙이는 것이 권장됩니다.
예시 코드
class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog();
myAnimal.sound(); // Dog barks
}
}
요약
- 언제? 부모 클래스의 메서드를 자식 클래스에서 새로운 동작으로 대체하고 싶을 때.
- 어디에서? 상속 관계에서 사용.
오버로딩 vs 오버라이딩 차이점
구분 | 오버로딩(Overloading) | 오버라이딩(Overriding) |
---|---|---|
목적 | 같은 이름의 메서드로 다양한 매개변수 처리 | 부모 클래스의 메서드를 자식 클래스에서 재정의 |
클래스 관계 | 같은 클래스 내에서 사용 | 상속 관계에서 사용 |
메서드 이름 | 같아야 함 | 같아야 함 |
매개변수 | 개수나 타입이 달라야 함 | 부모 클래스와 완전히 동일해야 함 |
반환 타입 | 다를 수 있음 | 부모 클래스와 동일해야 함 |
접근 제어자 | 영향 없음 | 부모 클래스보다 더 좁은 범위로 설정 불가 |
정리
- 오버로딩: 같은 클래스에서 메서드 이름은 유지하고, 매개변수를 달리하여 다양한 작업 처리.
- 오버라이딩: 부모 클래스 메서드를 자식 클래스에서 재정의하여 새로운 기능 추가.
💡 헷갈릴 땐 이렇게 기억하세요!
- 오버로딩은 같은 클래스 내에서 "메서드를 다양하게 만드는 것."
- 오버라이딩은 상속 관계에서 "부모의 것을 덮어쓰는 것."
😊 이해가 잘 안 되는 부분이 있으면 댓글로 질문 남겨주세요. 끝까지 포기하지 말고 조금만 더 힘내세요! 💪
반응형
SMALL
'JAVA' 카테고리의 다른 글
초보자를 위한 Java 제네릭 가이드: 쉽게 배우는 코드 재사용 (0) | 2024.12.20 |
---|---|
Java 스트림(Stream)과 람다(Lambda) 완벽 가이드: 초보자를 위한 쉬운 설명과 활용법 (0) | 2024.12.20 |
메모리 관리의 핵심! Java Garbage Collection 쉽게 이해하기 (0) | 2024.12.19 |
Java 객체지향 원칙 완벽 가이드: 캡슐화, 상속, 다형성, 추상화 쉽게 배우기 (0) | 2024.12.19 |
Java 제어문 초보자 가이드: if, switch, for, while 쉽게 배우기 (1) | 2024.12.18 |