728x90
반응형
SMALL

오버로딩(Overloading)

  • 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미한다.
  • 리턴값만을 다르게 갖는 오버로딩은 작성 할 수 없다.

프로그래밍에서 주로 사용되는 용어로, 주로 메서드 또는 함수의 이름은 동일하지만 매개변수의 유형이나 개수가 다른 여러 메서드 또는 함수를 하나의 클래스나 객체 안에 정의하는 기법을 의미

public int add(int a, int b) {
    return a + b;
}

public float add(float a, float b) {
    return a + b;
}

'add'라는 이름의 함수를 정의할 때, 이 함수가 두 개의 정수를 더하는 기능과 두 개의 실수를 더하는 기능을 동시에 가질 수 있도록 만들 수 있다. 이 경우, 함수 이름은 'add'로 동일하지만, 매개변수의 유형이나 개수가 다르므로 이를 오버로딩이라고 한다.

오버로딩을 사용하면 같은 이름의 메서드나 함수를 동일하게 사용할 수 있으므로 코드의 가독성을 높일 수 있다. 또한, 메서드나 함수의 이름을 새로 생각해내는 데 시간을 쓰지 않아도 되므로 개발 시간을 절약할 수 있다.

단, 오버로딩된 함수나 메서드는 매개변수의 유형이나 개수가 달라야 하며, 반환 유형만 다른 경우에는 오버로딩으로 간주되지 않는다. 이는 컴파일러나 인터프리터가 호출할 함수나 메서드를 결정하는 방식 때문이다. 함수나 메서드를 호출할 때 매개변수의 유형과 개수를 기반으로 어떤 함수나 메서드를 실행할지 결정하게 되는데, 반환 유형만 다른 경우에는 이를 구분할 수 없기 때문이다.


오버라이딩(Overriding)

  • over + ride = 먼가 위에서 (라이딩 한다)달린다???
  • 상위 클래스의 메서드를 하위 클래스가 재정의 하는 것이다.
  • 메서드의 이름은 물론 파라메터의 갯수나 타입도 동일해야 하며, 주로 상위 클래스의 동작을 상속받은 하위 클래스에서 변경하기 위해 사용된다.

객체지향 프로그래밍에서 사용되는 개념으로, 하위 클래스 또는 파생 클래스에서 상위 클래스 또는 부모 클래스의 메서드를 재정의하는 것을 의미

오버라이딩은 상속 관계에서 발생한다. 즉, 하위 클래스는 상위 클래스에서 정의한 메서드를 그대로 상속받을 수도 있고, 필요에 따라 동일한 이름의 메서드를 재정의하여 사용할 수 있다. 이때, 원래 메서드의 선언(매개변수의 유형 및 개수)은 변경되지 않지만, 메서드의 내부 구현이 변경된다.

오버라이딩을 통해 코드 재사용성을 높일 수 있으며, 다형성(polymorphism)을 지원하는 객체지향 언어의 주요 기능 중 하나이다. 다형성은 상위 클래스의 참조를 사용하여 하위 클래스의 인스턴스를 조작할 수 있는 기능을 의미하며, 오버라이딩된 메서드를 호출할 때 실행되는 코드는 객체의 실제 타입에 따라 결정된다.

class Animal {
    void makeSound() {
        System.out.println("The animal makes a sound");
    }
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("The dog barks");
    }
}

class Cat extends Animal {
    void makeSound() {
        System.out.println("The cat meows");
    }
}

Java에서 'Animal'이라는 상위 클래스가 'makeSound'라는 메서드를 가지고 있고, 'Dog'과 'Cat'이라는 하위 클래스가 각각 'makeSound' 메서드를 오버라이딩하여 다르게 구현하면, 'Animal' 클래스의 참조를 사용하여 'Dog' 또는 'Cat' 인스턴스의 'makeSound' 메서드를 호출할 수 있다. 이때 호출된 'makeSound' 메서드는 객체의 실제 타입에 따라 'Dog' 또는 'Cat' 클래스에서 오버라이딩된 'makeSound' 메서드가 된다.

오버라이딩은 다양한 타입의 객체를 일관된 방식으로 처리할 수 있게 해주며, 코드의 유연성과 확장성을 높여준다.


오버로딩과 오버라이딩의 차이점

오버로딩(Overloading)은 기존에 없던 새로운 메서드를 정의하는 것이고,

오버라이딩(Overriding)은 상속 받은 메서드의 내용만 변경 하는 것이다.

구분 오버로딩 오버라이딩

메소드 이름 동일 동일
매개변수, 타입 다름 동일
리턴 타입 상관없음 동일

가장 큰 차이는 오버로딩이 같은 이름을 가진 함수나 메서드가 다양한 매개변수를 가질 수 있게 하는 반면, 오버라이딩은 상속받은 메서드의 동작을 하위 클래스에서 변경할 수 있게 한다는 것이다. 이 두 개념은 모두 객체지향 프로그래밍의 다형성 개념을 지원한다.

728x90
반응형
LIST

+ Recent posts