CS 공부

# 오버로딩과 오버라이딩

박태정 입니다. 2025. 2. 16. 02:30
반응형

오버로딩과 오버라이딩에 대한 내 생각 💭

오늘은 오버로딩과 오버라이딩에 대해 정리해보려고 한다. 사실 처음에는 헷갈리기도 했고, 지금도 완벽하게 이해한 건 아니지만, 그래도 내 생각을 풀어보려고 한다.

오버로딩 (Overloading) 🔧

오버로딩은 "과적하다"는 의미가 있다고 했다. 이름이 같아도 매개변수의 개수, 타입, 순서를 다르게 해서 같은 이름으로 여러 메서드를 정의할 수 있다는 거였다. 예를 들어 add(int a, int b)add(double a, double b) 같은 거였다. 이런 게 왜 필요할까?

처음엔 왜 이름을 같은 걸로 써야 할까? 싶었다. 매개변수가 다르면 메서드 이름도 달리 해야 하는 거 아닌가? 그런데, 이렇게 같은 이름을 쓰는 이유는 유연하게 메서드를 호출할 수 있고, 코드를 깔끔하게 유지할 수 있기 때문이었다. 매개변수만 다르게 해서 같은 이름으로 여러 가지 처리를 할 수 있다는 게 직관적이어서 좋은 거였다.

그리고 오버로딩은 같은 클래스 내에서만 사용한다고 했다. 다른 클래스에서 오버로딩을 할 수 없다는 점도 궁금했는데, 아마 메서드를 하나로 묶어서 관리할 수 있기 때문인 것 같다.

오버라이딩 (Overriding) 🌟

다음은 오버라이딩이다. 오버라이딩은 상위 클래스의 메서드를 하위 클래스가 재정의하는 거였다. 상속 관계에서 주로 사용된다. 근데 상속받은 메서드를 왜 다시 정의해야 할까? 그냥 부모 클래스의 메서드를 쓰면 되지 않나?

그런데, 하위 클래스에서 부모 클래스의 메서드를 그대로 쓸 수도 있지만, 그 메서드가 하위 클래스의 상황에 맞게 변경이 필요할 때 오버라이딩을 사용해야 한다는 거였다. 예를 들어 동물 클래스에서 makeSound() 메서드를 상속받은 고양이는 "야옹", 개는 "멍멍"처럼 각각 소리를 내게 만들 수 있다. 이럴 때 오버라이딩이 유용하다.

오버라이딩이 안 되는 경우도 있다고 했다. static 메서드final 메서드는 오버라이딩이 불가능하다. static은 클래스 레벨에서 관리되니까 인스턴스 레벨에서 재정의할 수 없고, final은 재정의를 막기 위해서 그렇다.

마무리 🤔

  • 오버로딩은 매개변수 차이에 따라 같은 이름의 메서드를 여러 번 정의해서 코드가 유연해지고 깔끔해진다.
  • 오버라이딩상속받은 메서드를 하위 클래스에서 재정의해서, 각 객체가 특화된 동작을 하게 만든다.
반응형