본문 바로가기
Programming

Overloading과 Overriding의 차이

by BTC_아리 2024. 1. 5.

베하!

새로운 한 해가 시작되었습니다.

모두들 2024년도 힘찬 시작을 하셨나요?

 

오늘 들고 온 이야기 주제는 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이입니다.

객체 지향 프로그래밍에서 다형성은 같은 이름의 메서드나 연산자가 다른 클래스에 대해 다른 동작을 하도록 하는 것을 말합니다. 이것을 구현할 때 오버로딩, 오버라이딩 한다. 라고 할 수 있습니다.

이러한 오버로딩과 오버라이딩이 무엇인지 좀 더 자세히 알아보고 차이를 이해하는 시간을 가져봅니다.

 

오버로딩(Overloading)

오버로딩의 개념

메소드 오버로딩은 같은 이름의 메소드가 매개변수의 수나 타입에 따라 다르게 동작하는 것을 말합니다. 즉, 동일한 메소드 이름을 가지지만 서로 다른 시그니처를 갖는 메소드를 여러 개 정의할 수 있습니다.

  • 같은 이름의 메소드를 여러개 정의
  • 매개변수의 타입이 다르거나 개수가 달라야 함
  • return type과 접근 제어자는 영향을 주지 않음

오버로딩 예시

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

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

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

위의 예시에서 add 메소드는 세 가지 버전으로 오버로딩되어 있습니다. 각각은 매개변수의 타입이나 수에 따라 다르게 동작합니다.

 

오버라이딩(Overriding)

오버라이딩의 개념

메소드 오버라이딩은 상위 클래스에서 정의된 메소드를 하위 클래스에서 동일한 시그니처로 다시 정의하는 것을 말합니다. 이때, 하위 클래스에서 정의한 메소드가 상위 클래스의 메소드를 대체합니다.

  • 부모 클래스(상위 클래스)의 메소드를 자식 클래스(하위 클래스)에서 재정의

오버라이딩 예시

class Animal {
    void makeSound() {
        System.out.println("Some generic sound");
    }
}

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

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("Meow!");
    }
}

위의 예시에서 makeSound 메소드는 Animal 클래스에서 정의되었고, DogCat 클래스에서 오버라이딩되어 해당 클래스의 동물이 나타내는 소리로 대체됩니다.

 

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

  1. 선언 위치
    • 오버로딩 : 한 클래스 내에서 발생
    • 오버라이딩 : 상속 관계에서 부모 클래스의 메소드를 자식 클래스에서 재정의할 때 발생
  2. 목적
    • 오버로딩 : 같은 기능을 하는 메소드를 다양한 매개변수로 제공
    • 오버라이딩 : 부모 클래스의 메소드를 자식 클래스에서 필요에 맞게 재정의
  3. 컴파일 시점
    • 오버로딩 : 컴파일 시점에 메소드 호출 시점이 결정
    • 오버라이딩 : 실행 시점에 객체의 타입에 따라 동적으로 메소드가 호출됨

 

사진 출처 : http://hoi5088.medium.com/overloading-overriding-49adb4e65afe

 

그럼 다음에 또 재미있는 주제로 만나요 안녕~~

'Programming' 카테고리의 다른 글

HTTP 상태 코드 정리  (2) 2024.01.13
Spring Boot Model validation 관련 애노테이션  (0) 2024.01.12
LLM 이란?  (1) 2024.01.05
[MyBatis] Collection과 Association  (0) 2023.12.22
Spring boot API ExceptionHandler  (0) 2023.12.22

댓글