개발 기록/OOP

오버로딩, 오버라이딩 (2020.10.23)

시유후 2022. 8. 4. 15:15

목차

     이름이 비슷비슷해서 공부할 때는 항상 헷갈렸던, 오버로딩과 오버라이딩을 설명해보겠다.

     

    오버로딩(overloading)

     오버로딩은 매개변수의 형식, 개수를 다르게 해서 메서드가 다양한 유형의 요청에 답할 수 있게 하는 것이다.

     예를 들어서, 덧셈을 위한 메서드를 만들었다.

    public int sum(int A, int B);

     이 메서드는 두 정수를 받아서 두 수의 합을 반환하게 되어있다.

     그런데 사용자가 3개의 정수의 합을 구하고 싶다고 한다면 어떻게할까?

     이런 경우, 아래와 같이 메서드를 새로 하나 더 만들면 된다.

    public int sum3(int A, int B, int C);

     하지만, 사용자가 다시 실수의 합을 구하는 메서드를 요청한다면?
    또 double형식의 함수를 하나 더 만들고,

    public double sumF(double A, double B)

     사용자가 다시 실수 3개의 합을 구하고 싶다고 하면 또 sumF3의 함수를 만들것인가?

     우리는 이 때, 오버로딩을 이용해서 이 모든 함수명을 sum으로 만들 수 있다.

    public int sum(int A, int B);
    public int sum(int A, int B, int C);
    public double sum(double A, double B);

     

    오버라이딩

     상속을 받을 때, 부모클래스로부터 받은 메서드를 변형시키거나, 확장시켜서 사용할 때, 메서드를 다시 만들어서 사용할 수 있다.

     예로, 비행기 조종사를 하나 만들어보자.

    public class pilot{
    int career;
    public void introduce(){
    System.out.println("I'm a pilot");
    }
    }

    하지만 여객기 조종사는 또 다를 것이다.
    아래와 같이, 여객기 조종사만의 자기소개를 만들어서 사용할 수 잇다.

    public class airlinerPilot extends pilot{
    public void introduce(){
    System.out.println("I'm an ariliner pilot");
    }
    }

    정리해보자면

    구분 오버로딩 오버라이딩
    메서드이름 같음 같음
    반환형식 상관X 같음
    매개변수의 개수, 형식 다름 같음
    구현부 다름 다름