본문 바로가기

TIL/☕️ JAVA

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

오버로딩(overloading)과 오버라이딩(overriding)은 모두 객체지향 프로그래밍에서 자주 사용되는 개념이다.

 

 

오버로딩

같은 이름의 메소드를 매개변수의 개수나 타입 등을 다르게 해서 여러 개 정의하는 것을 말한다.

이렇게 하면 같은 이름의 메소드가 여러 개 있더라도 컴파일러가 매개변수의 타입과 개수를 보고 호출할 메소드를 구분할 수 있다.

 

예를 들어, 아래와 같은 메소드를 생각해 볼 수 있다.

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

이렇게 add 메소드를 매개변수의 타입에 따라서 두 개의 버전을 만들었다. 이렇게 하면 int 타입의 두 정수를 더할 때는 첫 번째 메소드가 호출되고, double 타입의 두 실수를 더할 때는 두 번째 메소드가 호출된다.

 

 

오버라이딩

반면에, 오버라이딩은 상위 클래스에 정의된 메소드를 하위 클래스에서 재정의하는 것을 말한다.

이때 상위 클래스의 메소드와 같은 이름, 매개변수 타입, 반환 타입을 가지는 메소드를 하위 클래스에서 정의하면, 하위 클래스에서 이 메소드를 호출하면 상위 클래스의 메소드 대신 하위 클래스에서 정의한 메소드가 호출된다.

 

예를 들어, 아래와 같은 코드를 생각해 볼 수 있다.

 
class Animal { 
	public void makeSound() { 
    	System.out.println("Animal is making a sound"); 
    } 
} 

class Dog extends Animal { 
	public void makeSound() { 
    	System.out.println("Dog is barking"); 
    } 
}
 

위 코드에서 Animal 클래스의 makeSound() 메소드를 Dog 클래스에서 재정의하고 있다.

이렇게 하면 Dog 객체에서 makeSound() 메소드를 호출하면 Animal 클래스의 makeSound() 대신 Dog 클래스에서 정의한 makeSound()가 호출된다.

 

 

 

오버로딩 : 같은 이름의 메소드를 여러 개 정의하는 것
오버라이딩 :상위 클래스의 메소드를 하위 클래스에서 재정의하는 것