오버로딩과 오버라이딩

조현태·2023년 3월 21일
0

✨ 오버로딩 (Overloading) ✨

오버로딩이란?

오버로딩은 함수 오버로딩과 생성자 오버로딩이 있습니다.

같은 이름의 함수 (메서드)를 여러개 정의하고, 인수(매개변수)의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게됩니다.

예시 코드

public class Overloading {
    // 같은 함수 이름, 다른 함수 내용 -> 통합됨.
    // 인수가 int일때
    public static int getPower (int number){
        return number*number;
    }

    // 인수가 String일때
    public static int getPower (String strNumber){
        // String을 int로 변환
        int number = Integer.parseInt(strNumber);
        return number*number;
    }
    // 인수가 2개일때
    public static int getPower (int num, int exp) {
        int result = 1;
        for (int i = 0; i < exp; i++)
            result *= num;
        return result;
    }

    public static void main(String[] args) {
        // 메소드 오버로딩
        // 같은 이름의 메소드를 여러번 선언
        // 1. 전달 값의 타입이 다르거나
        // 2. 전달 값의 개수가 다르거나
        // 반환 타입은 상관이 없음!
        System.out.println(getPower(10)); 
        System.out.println(getPower("30")); 
        System.out.println(getPower(3,3)); 
    }
}

결과

100
900
27

반환값의 자료형은 상관이 없습니다.
아래 코드는 오류가 발생합니다.

public class Overloading {
    public static int getPower (int number){
        return number*number;
    }
    public static double getPower (int number){
        return 0.0;
    }
}

✨ 오버라이딩 (Overriding) ✨

오버라이딩이란?

상위(부모) 클래스가 가지고 있는 멤버변수가 하위(자식) 클래스로 상속되는 것처럼 상위 클래스가 가지고 있는 함수(메서드)도 하위 클래스로 상속되어 하위 클래스에 사용할 수 있습니다. 또한, 하위 클래스에서 함수를 재정의해서도 사용할 수 있습니다.

쉽게 말해 함수(메서드)의 이름이 서로 같고, 매개변수가 같고, 반환형이 같을 경우에 상속받은 함수를 덮어 상위 클래스의 함수 대신 자식 클래스의 함수를 사용한다고 생각하시면 됩니다.

예시 코드

부모 클래스

public class Animal {
    void speak () {
        System.out.println("The animal speaks");
    }
}

자식 클래스 (1)

public class Dog extends Animal {
    @Override // 오버라이딩 표시
    void speak () {
        System.out.println("멍멍");
    }
}

자식 클래스 (2)

public class Cat extends Animal {
    @Override // 오버라이딩 표시
    void speak () {
        System.out.println("냐옹");
    }
}

메인함수

public class Overriding {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Dog dog = new Dog();
        Cat cat = new Cat();
        // 특정 구조체에 같은 이름의 함수가 있다면,
        // override 함수를 실행함.
        animal.speak();
        dog.speak();
        cat.speak();
    }
}

결과

The animal speaks
멍멍
냐옹

Animal 객체에서는 부모 클래스의 speak 함수의 실행결과인 The animal speaks 가 그대로 나오지만 Animal의 자식 클래스인 CatDog 클래스는 각각 오버라이딩한 speak 함수를 실행하는 것을 볼 수 있습니다.


참고 자료
https://private.tistory.com/25
YouTube : BroCode

0개의 댓글