티스토리 뷰

Java

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

토마's 2016. 8. 8. 22:48

오늘은 면접시에 자주 나오는 오버로딩과 오버라이딩에 대해서 포스팅 하도록 하겠습니다.


■ 오버로딩(Overloading)

오버로딩은 하나의 클래스 내에 인수의 개수나 타입형식이 다른, 동일한 이름의 메소드(함수)를 여러개 정의하는 것입니다.

줄여서 말하자면 해당 메소드(함수)가 이름이 같더라도 안에 있는 매개변수(인수)만 다르다면 얼마든지 만들수 있습니다. 


오버로딩의 규칙으로는

1. 오버로딩을 할 메소드는 메소드의 이름이 같아야 합니다.

2. 오버로딩을 할 메소드의 매개변수는 다르게해야 됩니다.


위와 같이 설명을 통해 오버로딩에 대해서 알아봤는데 조금 더 자세하게 예제로 알아보도록 하겠습니다.

class OverloadingTest {

  void test() {
    // 매개 변수가 없는 test 함수
  }

  void test(int a) {
    // int형 매개변수 1개를 가지는 test 함수
  }

  void test(String a) {
    // String형 매개변수 1개를 가지는 test 함수
  }

  void test(int a, int b) {
    // int형 매개변수 2개를 가지는 test함수
  }

}

이렇듯, 파라미터의 개수와 파라미터 타입를 다르게 해서 같은 이름의 함수를 여러개 선언할 수 있는 것이 오버로딩입니다.

다음은 오버라이딩에 대해서 알아보도록 하겠습니다.




■ 오버라이딩(Overriding)

오버라이딩은 상속을 했을 경우에 적용할 수 있습니다. 오버라이딩은 기존의 내용(상위 클래스의 메소드)의 틀만 가져와서

재정의하는 것이며, 반환값, 메소드명, 매개변수가 상속관계의 상위 클래스와 같아야합니다. 그리고 하위 클래스에서

기능의 변경도 가능합니다. 


오버라이딩의 규칙으로는

1. 오버라이딩을 할 메소드는 메소드 이름이 같아야합니다.

2. 오버라이딩을 할 메소드는 매개변수도 같아야 합니다.

3. 오버라이딩을 할 메소드는 반환형이 같아야 합니다.


위와 같이 설명을 통해 오버라이딩에 대해서 알아보았는데, 예제를 통해 자세히 알아보도록 하겠습니다.

class Parent {

  void parentMethod() {
    System.out.println("부모 클래스 메소드 입니다."); // 부모 클래스의 메소드
  }

}

class Child extends Parent {

  void parentMethod() {
    System.out.println("자식 클래스 메소드입니다."); // 자식 클래스에서 부모 클래스의 메소드 재정의
  }

}

class OverridingTest() {

  public static void main(String[] args) {
    Child c = new Child();
    c.parentMethod(); // 메소드를 호출하게 되면 "자식 클래스 메소드입니다."가 출력됩니다.
  }

}

이처럼, 부모클래스에 정의된 메소드를 상속받은 자식 클래스에서 재정의 해서 사용할 수 있는 것이 오버라이딩입니다.



오늘은 면접시 면접자들 또는 저와 같은 초보 개발자들이 많이들 헷갈려 하는 오버로딩과 오버라이딩에 대해서 간단한 예제를

통해 알아보았고, 이만 포스팅을 마치도록 하겠습니다.