자바(Java)를 학습하다 보면 자주 등장하는 개념 중 하나가 오버로딩(Overloading)과 오버라이딩(Overriding)입니다. 이 두 개념은 비슷해 보이지만 완전히 다른 목적을 가지고 있습니다. 이번 글에서는 오버로딩과 오버라이딩의 개념과 차이를 간단한 예제와 함께 알아보겠습니다.
1. 오버로딩(Overloading) - 같은 이름, 다른 매개변수
오버로딩(Overloading)은 같은 이름의 메서드를 다른 매개변수를 사용하여 정의하는 것을 의미합니다. 메서드 이름은 같지만, 매개변수의 개수나 타입이 다르다면 오버로딩이 가능합니다.
public class Calculator {
// 두 정수를 더하는 메서드
public int add(int a, int b) {
return a + b;
}
// 세 정수를 더하는 메서드 (매개변수 개수가 다름)
public int add(int a, int b, int c) {
return a + b + c;
}
// 두 실수를 더하는 메서드 (매개변수 타입이 다름)
public double add(double a, double b) {
return a + b;
}
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(2, 3)); // 5 출력
System.out.println(calc.add(2, 3, 4)); // 9 출력
System.out.println(calc.add(2.5, 3.5)); // 6.0 출력
}
}
핵심 포인트
- 이름이 같은 메서드를 여러 개 정의할 수 있음.
- 매개변수의 개수나 타입이 다르면 오버로딩이 가능.
- 컴파일 시점에 호출할 메서드가 결정됩니다.
2. 오버라이딩(Overriding) - 부모 메서드 재정의
오버라이딩(Overriding)은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 의미합니다. 부모 클래스의 메서드와 이름, 매개변수, 리턴 타입이 모두 동일해야 하며, 자식 클래스에서 구현 내용을 바꿀 수 있습니다.
// 부모 클래스
class Animal {
public void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
// 자식 클래스
class Dog extends Animal {
@Override
public void sound() {
System.out.println("강아지가 멍멍 소리를 냅니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
animal.sound(); // "동물이 소리를 냅니다." 출력
Animal dog = new Dog();
dog.sound(); // "강아지가 멍멍 소리를 냅니다." 출력
}
}
핵심 포인트
- 부모 클래스의 메서드와 이름, 매개변수, 리턴 타입이 동일해야 함.
- @Override 어노테이션을 사용하여 오버라이딩 여부를 명시.
- 실행 시점에 호출할 메서드가 결정됩니다(다형성).
3. 오버로딩과 오버라이딩의 차이점
항목오버로딩(Overloading)오버라이딩(Overriding)
정의 위치 | 같은 클래스 | 부모 클래스와 자식 클래스 |
메서드 이름 | 같아야 함 | 같아야 함 |
매개변수 | 다를 수 있음 | 같아야 함 |
리턴 타입 | 달라도 됨 | 같아야 함 |
결정 시점 | 컴파일 시점 | 실행 시점 |
목적 | 다양한 입력에 대해 하나의 메서드 이름으로 처리 | 상속받은 메서드를 자식 클래스에서 재정의 |
마무리
- 오버로딩은 같은 이름의 메서드를 매개변수의 차이를 통해 정의하는 것이며, 컴파일 시점에 호출이 결정됩니다.
- 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것이며, 실행 시점에 호출이 결정됩니다.
이 두 개념은 자바에서 다형성과 코드 재사용성을 높이는 핵심 기술입니다. 오버로딩과 오버라이딩의 차이를 명확히 이해하고, 예제를 통해 직접 연습해 보세요! 🎉
'IT' 카테고리의 다른 글
마이그레이션이란? (0) | 2024.11.17 |
---|---|
DTO와 Entity, VO의 차이점, 개념, 그리고 분리의 목적 (0) | 2024.11.16 |
자바에서 변수,메소드 이름 쉽게 짓기! (5) | 2024.11.15 |
AngularJS Git Commit Message Convention이란? (1) | 2024.11.15 |
배포 중에도 서비스 중단 없이! - 무중단 배포 전략 알아보기 (1) | 2024.11.13 |