본문 바로가기
✍ 따뜻한 개발 공부

오버라이딩과 오버로드 ?

by 따따시 2023. 5. 5.

 

 

오버로딩(Overloading)과 오버라이딩(Overriding)은 객체 지향 프로그래밍에서 중요한 개념

 

 

1. 오버로딩 (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 class Main {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        System.out.println(calculator.add(1, 2));
        System.out.println(calculator.add(1, 2, 3));
        System.out.println(calculator.add(1.0, 2.0));
    }
}

=> 매개변수 타입, 개수에 따라서 실행되는 함수가 다름 (overloading)

 

 

 

 

 

2. 오버라이딩 (Overriding)

 

오버라이딩은 상위 클래스가 가지고 있는 메서드를 하위 클래스에서 다시 정의하는 것

=> 즉, 상위 클래스의 메서드를 덮어쓰는 것

 

오버라이딩을 통해 하위 클래스에서는 상위 클래스의 메서드를 수정하거나 보완할 수 있다.

이렇게 하위 클래스에서 오버라이딩한 메서드는 상위 클래스의 메서드보다 우선순위가 높아지므로, 하위 클래스의 인스턴스에서 해당 메서드를 호출하면 하위 클래스에서 정의한 메서드가 호출된다.

 

[ 오버라이딩을 구현한 예시 코드 ]

public class Animal {
    public void makeSound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

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

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

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Animal();
        Animal animal2 = new Dog();
        Animal animal3 = new Cat();

        animal1.makeSound();    // 동물이 소리를 냅니다 가 호출
        animal2.makeSound();	// 멍멍 호출
        animal3.makeSound();	// 야옹 호출
    }
}

 

댓글