오버로딩 & 오버라이딩

썩은요플렛's avatar
Aug 05, 2024
오버로딩 & 오버라이딩
 
💡
오버로딩(Overloading)과 오버라이딩(Overriding)
 
이 둘은 다형성을 높여주는 개념이며, 비슷한 이름을 가지고 있지만, 전혀 다른 개념이라고 봐도 될만큼 차이가 있다
 
 

오버로딩(Overloading)

 
  • 오버로딩은 같은 이름의 메서드를 여러 개 정의해, 인자의 수나 타입에 따라 다른 동작을 수행하게 하는 것을 의미.
  • 동일한 이름을 가진 메서드가 여러 개 정의됨.
  • 메서드의 파라미터 수나 타입이 달라야 함.
  • 어떤 메서드가 호출될 지 컴파일 타임에 결정됨.
 
class Math { // 두 개의 정수를 더하는 메서드 int add(int a, int b) { return a + b; } // 세 개의 정수를 더하는 메서드 int add(int a, int b, int c) { return a + b + c; } // 두 개의 실수를 더하는 메서드 double add(double a, double b) { return a + b; } } public class Main { public static void main(String[] args) { Math math = new Math(); // 메서드 오버로딩 호출 예시 System.out.println(math.add(1, 2)); // Output: 3 System.out.println(math.add(1, 2, 3)); // Output: 6 System.out.println(math.add(1.5, 2.5)); // Output: 4.0 } }
 

오버라이딩(Overriding)

 
  • 오버라이딩은 부모 클래스에 정의된 메서드를 자식클래스에서 재정의하여, 부모 클래스의 메서드를 덮어쓰는 것을 말함. 이는 런타임에 결정되며, 동적 다형성을 구현함.
  • 부모 클래스와 동일한 이름의 메서드를 자식 클래스에서 재정의함.
  • 메서드의 파라미터, 반환타입이 동일해야 한다.
  • 어떤 메서드가 호출이 되는지 런타임에 결정됨.
 
// 상위 클래스 class Animal { // 상위 클래스의 메서드 public void sound() { System.out.println("Some sound"); } } // 하위 클래스 class Dog extends Animal { // 메서드 오버라이딩 @Override public void sound() { System.out.println("Bark"); } } // 또 다른 하위 클래스 class Cat extends Animal { // 메서드 오버라이딩 @Override public void sound() { System.out.println("Meow"); } } public class Main { public static void main(String[] args) { Animal animal = new Animal(); Animal dog = new Dog(); Animal cat = new Cat(); // 메서드 오버라이딩 호출 예시 animal.sound(); // Output: Some sound dog.sound(); // Output: Bark cat.sound(); // Output: Meow } }
 

요약 비교

 
특성
오버로딩(Overloading)
오버라이딩(Overriding)
메서드 이름
동일
동일
파라미터(매개변수)
다름
동일
반환 타입
다를 수 있음
동일
접근 제어자(public,private…)
상관없음
동일 혹은 더 넓은 범위
결정 시점
컴파일 타임
런타임
사용하는 상황
같은 클래스 내에 여러 버전의 메서드를 제공할 때
부모 클래스의 메서드를 자식 클래스에서 재정의 할 때
 
Share article

RottenYogurt's Development Blog