[프로그래밍 언어론] 오버라이딩(Overriding)과 오버로딩(Overloading)의 차이

오버로딩과 오버라이딩의 차이
출처 ( https://www.educba.com/difference-between-method-overloading-and-method-overriding/ )

 

오버로딩(Overloading)이란?

오버로딩은 같은 클래스 내에 여러 개의 같은 이름의 메서드를 정의하는 것이다. 이때 메서드의 이름은 같지만 매개변수(parameter)의 개수나 타입이 달라야 한다. return 값만 다른 것은 오버로딩이라고 볼 수 없다.

 

예를 들어 아래와 같이 Food 클래스 내에 여러 가지의 eat 메서드를 정의할 수 있다.

public class Food{
	
    void eat(Noodle noodle){
    	System.out.println("후루룩");
    }
    
    void eat(Pizza pizza){
    	System.out.prinln("냠냠");
    }
    
    void eat(Noodle noodle, Ramen ramen){
    	System.out.prinln("호로록~");
    }
    
}

 

같은 메서드 명이여도 파라미터의 타입이 다르거나, 파라미터의 개수가 다르면 해당 메서드를 호출할 때 파라미터에 무엇을 넣느냐에 따라 해당 메서드를 호출하게 된다.

 

오버라이딩(Overriding)이란?

오버라이딩은 상속 관계에 있는 클래스 간에 같은 이름의 메서드를 정의하는 것이다. 상위 클래스의 메서드를 하위 클래스가 재정의하는 것을 오버라이딩이라고 한다.

 

오버라이딩은 오버로딩과 다르게 메서드의 이름뿐만 아니라 파라미터의 개수와 타입 모두 동일해야 한다

 

public class Food{
        public void taste(int score){
            System.out.println(score + "만큼 맛있다");
        }
}

public class Pizza extends Food{
	public void taste(int score){
		System.out.println(score + "만큼 쫄깃하다");
	}
}

Food food = new Food();
food.taste(100);   // 100만큼 맛있다
    
Pizza pizza = new Pizza();
pizza.taste(90);    // 90만큼 쫄깃하다

 

위와 같이 자식 클래스가 부모 클래스의 메서드를 재정의해 자신에 맞게 바꿀 수 있다.

 

 

결론

 

오버로딩은 한 클래스 내에 같은 이름의 메서드를 파라미터의 개수나 타입을 다르게 해 여러 개 정의하는 것이다.

 

오버라이딩은 부모 클래스의 메서드를 자식 클래스가 상속받아 자신에 맞게 재정의 한 것이다. 

 

반응형

댓글

Designed by JB FACTORY