[Java] 오버로딩과 오버라이딩?? 그게 뭔데?

chiyongs·2022년 7월 2일
2
post-thumbnail

오버로딩과 오버라이딩

오버로딩과 오버라이딩은 제가 Java를 처음 공부하면서 굉장히 헷갈려했던 개념입니다. 이번 글에서는 오버로딩과 오버라이딩이 무엇인지 알아보려고 합니다.

오버로딩(Overloading) ⚽️ 🏀

오버로딩은 동일한 메소드명을 가지지만 파라미터의 타입이나 개수를 다르게 하여 여러 메소드를 정의하는 것을 말합니다.

  • 동일한 메소드명을 가져야 합니다.
  • 리턴타입은 오버로딩에 영향을 끼치지 않습니다.
  • 파라미터의 개수가 같다면, 파라미터의 타입이 달라야 합니다.
  • 파라미터의 개수가 달라야 합니다.

그렇다면 오버로딩은 언제 사용할까요??

동일한 메소드명을 가지지만 파라미터에 따라서 다르게 처리를 하고 싶은 경우 주로 사용합니다.

오버로딩 예시

우리는 결제 서비스를 만들고 있습니다. 고객은 신용카드, 모바일, 현금, 제로페이 등 여러 방법으로 결제할 수 있습니다. 그렇다면 우리는 결제라는 동일한 이름의 메소드에 들어오는 파라미터에 따라 다르게 처리할 수 있도록 오버로딩을 활용할 수 있습니다.

public class PayService {
	
    public Object payment(CreditCard creditCard) {
    	// 신용카드로 결제할 때 사용될 메소드
    	...
    }
    
    public Object payment(Mobile mobile) {
    	// 모바일로 결제할 때 사용될 메소드
    	...
    }
    
    public boolean payment(Cash cash) {
    	// 현금으로 결제할 때 사용될 메소드
    	...
    }
    
    public Object payment(Zeropay zeropay) {
    	// 제로페이로 결제할 때 사용될 메소드
    	...
    }
    
    public void payment(CreditCard creditCard, Cash cash) {
    	// 신용카드와 현금으로 나누어 결제할 때 사용될 메소드
    	...
    }
}

오버라이딩(Overriding) 🪆

오버라이딩은 자식클래스에서 부모클래스로부터 상속받은 메소드를 재정의하는 것을 말합니다.

  • 동일한 메소드명, 리턴타입, 파라미터를 가져야 합니다.
  • 상속받은 메소드의 내용을 변경할 수 있습니다.

그렇다면 오버라이딩은 언제 사용할까요??

자식클래스에서 상속받은 메소드의 기능을 확장하거나 변경하여 사용하고 싶을 때 주로 사용합니다.

오버라이딩 예시

public class Human {
	
    public void work() {
    	System.out.println("일");
    }
}
public class Doctor extends Human {
	
    @Override // 부모 클래스의 메소드를 오버라이딩한다는 것을 명시적으로 나타냄
    public void work() {
    	System.out.println("환자들을 치료합니다");
    }
}

public class Teacher extends Human {
	
    @Override // 부모 클래스의 메소드를 오버라이딩한다는 것을 명시적으로 나타냄
    public void work() {
    	System.out.println("학생들을 가르칩니다.");
    }
}

예시과 같이 work()메소드를 상속받아 자식클래스에서 사용하는 의미와 기능에 맞게 변경하거나 확장하여 사용할 수 있습니다.


정리

👉 오버로딩은 하나의 클래스에서 동일한 이름을 가지는 여러 가지의 메소드를 정의하는 것입니다. 이를 통해, 파라미터에 따라서 다양하게 처리할 수 있습니다.

👉 오버라이딩은 부모로부터 상속받은 메소드의 기능을 자식 클래스에 맞게 변경하는 것입니다.

오버로딩오버라이딩
메소드명동일해야 합니다.동일해야 합니다.
파라미터기본적으로는 개수가 달라야 함. 하지만, 개수가 같다면, 타입이 달라야 함동일해야 합니다.
리턴타입상관없습니다.동일해야 합니다.

0개의 댓글