자바를 공부하게 되면 꼭 듣게되는 두 개념에 대해 알아보자!
이 개념을 모르고 자연스럽게 이것을 적용해서 개발을 하고 있는 코린이들을 위한 글이다.
제대로 개념을 이해하고 오버로딩과 오버라이딩을 사용해보도록하자!

위 와 같은 코드는 10과 20을 setOprands 메서드에 담아서 합을 출력하는 코드이다. 그런데 만약 3개의 값을 더하고 싶을 때는 어떻게 될까?

위 처럼 setOprands는 두개의 인자를 받을 수 있게 구현되어 있기에 오류가 나고 있는 상황이다. 이때 오류를 해결할 가장 쉬운방법은 3개의 인자를 받을 수 있는 메서드를 생성하는것이다.
일반적으로는 메서드 이름을 같게하지 않으므로 setOprands2 이런식으로 만들 수 있을 것이다.

그러나 setOprands와 setOprands2는 left, right, number와 같은 인자에 값을 넣는 같은 기능을 사용하고 있는데 사용자 입장에서 같은 기능을 사용하지만 넣어야하는 값의 개수에 따라 다른 메서드를 사용해야 한다는 것은 편의성 부분에서 굉장히 불편하다고 할 수 있다.
이때 오버로딩을 사용하면 이 부분을 해결할 수 있다.

자바에서는 메서드 이름이 같아도 메서드를 만들 수 있는데 이것이 바로 오버로딩이다. 위 코드에서는 setOprands가 같은 이름으로 두개의 메서드가 존재하지만 매개변수의 갯수가 다르기 때문에 사용가능하다. 이것이 오버로딩이다.
우리가 굉장히 많이 사용하는 print문이 바로 이 오버로딩의 대표적인 예시라고 할 수 있다. print 메서드는 다양한 타입의 데이터를 출력할 수 있게 오버로딩이 되어있다.
출력한다는 똑같은 기능을 데이터타입이 다르다고 다른 이름의 메서드를 호출해야 한다면 굉장히 불편했을 것이다.

재정의라고 불리는 오버라이딩을 이해하기 위해서는 상속에 대해서 알아야한다. 상속을 모른다면 상속에 대해서 공부하고 오자!

위 코드를 살펴보면 Calculator 클래스를 상속받아 Calculator가 가지고있는 sum 메서드에 덧셈결과를 출력하는 코드를 추가한 상태이다.
상속을 받은 클래스는 부모가 가진 메서드를 사용할 수 있는데 현재 부모가 가진 sum메서드를 SubCalculator(자식) 클래스에서 오버라이딩(재정의)하여 사용하고 있는 모습이다.
대표적인 오버라이딩의 예시로는 Object 클래스에 정의된 메서드들이 있습니다. 모든 클래스는 자바의 최상위 클래스인 Object 클래스를 상속받으므로, Object 클래스에 정의된 메서드들을 사용자가 필요에 맞게 오버라이딩하여 사용해야 합니다.