본문 바로가기

java(자바)

[java(자바)] 오버로딩과 오버라이딩의 차이 _디버깅의 눈물

객체 지향 프로그래밍의 특징 중 다형성(Polymorphism)에는 대표적으로 오버로딩과 오버라이딩이 있습니다.

 

오버로딩

 

public class OverloadingExample {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        double c = 3.14;

        int result1 = add(a, b);
        double result2 = add(a, b, c);

        System.out.println("result1 = " + result1);
        System.out.println("result2 = " + result2);
    }

    // int 타입 두 개를 더하는 메서드
    public static int add(int x, int y) {
        return x + y;
    }

    // int 타입 두 개와 double 타입 하나를 더하는 메서드
    public static double add(int x, int y, double z) {
        return x + y + z;
    }
}

 

 

-하나의 클래스 내에서, 같은 이름의 메소드를 여러 개 정의하는 것을 말합니다.

-메서드의 이름은 같지만, 매개변수의 개수나 데이터 타입이 다른 여러 메서드를 구현할 수 있습니다.

 

 

 

 

오버라이딩

 

public class OverridingExample {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Dog dog = new Dog();
        Cat cat = new Cat();

        animal.makeSound(); // 동물 울음소리
        dog.makeSound();    // 멍멍
        cat.makeSound();    // 야옹
    }
}

class Animal {
    public void makeSound() {
        System.out.println("동물 울음소리");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("야옹");
    }
}

 

-상위 클래스에서 이미 정의된 메서드를 하위 클래스에서 새로운 기능으로 재정의(추가 또는 수정)하는 것입니다.

-오버라이딩을 하기 위해서는, 상위 클래스와 하위 클래스에서 메서드 이름, 매개 변수의 개수와 데이터 타입, 그리고 반환 값의 데이터 타입이 모두 동일해야 합니다.

 

-위 코드는 Animal 클래스의 makeSound 메서드를 Dog 클래스와 Cat 클래스에서 각각 재정의하여 오버라이딩을 구현한 예시입니다. Animal 타입으로 생성한 객체에서 makeSound 메서드를 호출하면, 해당 객체의 클래스에 맞게 오버라이딩된 메서드가 실행됩니다.