오버로딩(Overloading)과 오버라이딩(Overriding)은 객체지향의 특징 중 하나인 다형성을 지원하는 방법입니다. 이 둘은 각각 다른 용도와 동작을 가지고 있습니다.

'오버로딩(Overloading) / 확장'
같은 이름의 메서드 여러 개를 가지면서 매개변수의 유형과 개수가 다르도록 사용하는 것
'오버라이딩(Overriding) / 재정의'
상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것
아래에서 각각의 개념에 대해 예시와 함께 설명하겠습니다.
메서드 Overloading은 같은 클래스 내에서 동일한 이름의 메서드를 여러 개 정의하는 것을 말합니다. 이때 메서드의 (매개변수의 타입, 개수)가 서로 달라야 합니다.

위의 예시에서 add() 메서드가 두 번 정의 되어 있습니다.
첫 번째 메서드는 정수를 더하고, 두 번째 메서드는 실수를 더하고 있습니다.
메서드 Overloading은 매개변수의 타입 또는 개수가 다르면 동일한 이름의 메서드를 여러 개 정의할 수 있도록 합니다.
코드의 가독성 향상: 비슷한 동작을 하는 메서드들이 같은 이름으로 그룹화되므로 코드의 가독성이 향상되고, 메서드의 이름이 명확하게 표현됩니다.
코드 감소: 유사한 작업을 하는 메서드들을 하나의 이름으로 통합함으로써 중복 코드를 감소시킵니다.
메서드 Overriding은 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서
동일한 매개변수와 리턴타입으로 다시 정의하는 것을 말합니다.
이때 부모 클래스와 자식 클래스 간에 상속 관계가 있어야 합니다.

위의 예시에서 Dog 클래스는 Animal 클래스를 상속받고 있습니다.
그리고 makeSound() 메서드를 재정의하여 자식 클래스에서 새로운 동작을 정의하고 있습니다.
메서드 Overriding은 상속을 통해 부모 클래스의 메서드를 자식 클래스에서 변경하거나 확장하는 데 사용됩니다.
상속을 통한 코드 재사용: 부모 클래스에서 정의된 메서드를 자식 클래스에서 재사용할 수 있으며, 필요에 따라 해당 메서드를 재정의하여 새로운 동작을 추가하거나 수정할 수 있습니다.
인터페이스 일관성: 부모 클래스에서 정의된 메서드 시그니처를 유지하면서 자식 클래스에서 새로운 구현을 제공함으로써 인터페이스의 일관성을 유지할 수 있습니다.
오버로딩된 메소드는 컴파일(Compile) 시에 어떤 메소드를 실행할지 결정됩니다.
오버라이딩된 메소드는 런타임(Runtime) 시에 어떤 메소드를 실행할지 결정됩니다.
오버로딩과 오버라이딩의 차이 요약
- Overloading = 이름은 같지만 그냥 전혀 다른 함수
- Loading = 불러오다. (전혀 다른 함수를 불러오다)
- Overriding = 부모에게 물려받아 변형한 함수
- Riding = 올라타다. (같은 함수를 올라타서 덮어 씌우고 새롭게 정의한다)
오버로딩(Overloading) & 오버라이딩(Overriding) 메소드 결정 시점 (JAVA)
https://nobacking.tistory.com/56
이미지 참고