반응형

Overloading 이란?

  • 메소드의 이름은 같지만, parameter의 개수나 타입을 달리하여 새로운 메소드를 정의
  • 상속관계에서 부모 클래스의 메소드와 접근제한자, return type, 함수명, 파라미터 등은 같고 body만 달라야 함

Overriding 이란?

  • 부모 클래스의 메소드를 자식 클래스에서 필요에 맞춰 재정의

Overloading 예제

public class Main {

    public static void main(String[] args) {
        System.out.println(add(10, 7));            // 17 출력
        System.out.println(add(10, 7, 5));        // 22 출력
        System.out.println(add(10.3, 5.2));        // 15.5 출력
    }

    static int add(int x, int y) {
        return x + y;
    }
    static int add(int x, int y, int z) {
        return x + y + z;
    }
    static double add(double x, double y) {
        return x + y;
    }
}
  • add를 3번 사용했지만, 모두 다른 add 메소드에서 값을 받아옴
  • 이처럼 메소드의 이름은 같지만 parameter의 개수나 타입에 따라 다른 메소드를 호출하는 것이 Overloading

Overriding 예제

public class Main {

    public static void main(String[] args) {
        Circle circle = new Circle();
        Rectangle rectangle = new Rectangle();
        circle.draw();        // 원을 그립니다.
        rectangle.draw();    // 도형을 그립니다.
    }

    static class Shape {
        void draw() {
            System.out.println("도형을 그립니다.");
        }
    }

    static class Circle extends Shape {
        @Override
        void draw() {
            System.out.println("원을 그립니다.");
        }
    }

    static class Rectangle extends Shape {
    }
}
  • 위 코드에서 Circle은 Shape를 상속받고, draw 메소드를 Overriding해서 다른 기능을 제공
  • Rectangle은 Shape를 상속받고 Overriding은 해주지 않았기 때문에, draw 메소드 호출시 부모의 draw 메소드가 호출됨
  • 이 때 Circle에서 @Override 어노테이션을 사용했는데, 사실 이 어노테이션은 안 써줘도 정상 작동함
  • 다만 이 메소드가 오버라이딩 되었다고 표시하기 위해 개발자들간의 약속 느낌으로 사용
반응형

↓ 클릭시 이동

복사했습니다!