오버로딩 vs 오버라이딩

오버로딩

개념

  • 이름은 같지만 시그니처(파라미터 수, 타입)가 다른 메소드를 중복으로 선언하는 것.

특징

  • 메소드 이름이 같아야함.

  • 시그니처는 달라야함. 파라미터 수가 다르거나 타입이 다르거나, 둘 다 다르거나.

  • 리턴 값은 시그니처에 해당되지 않음.

  • 접근 제어자는 자유롭게(같거나 다르게) 지정할 수 있다.

쓰는 이유

  • 가독성 증가시킴.

  • 같은 기능을 하는 메서드 관리가 쉬워짐.

오버라이딩

개념

  • 부모 클래스의 메소드의 동작 방법을 변경(재정의)하여 우선적으로 사용하는 것

특징

  • 메소드 이름이 같아야함.

  • 시그니처가 같아야함. 파라미터 수, 파라미터의 타입이 같아야한다.

  • 메소드 리턴형이 같아야한다.

  • 오버라이드 하고자 하는 메소드가 상위 클래스에 존재해야 한다.

  • 상속 받은 클래스의 메소드를 오버라이딩할 때, 스태틱 메소드를 오버라이딩 하게 되면 상위 클래스의 메소드가 하이딩 처리된다. 자바에서는 이 하이딩 처리를 권장하지 않는다.

  • private 메서드는 오버라이딩이 불가하다. 당연한 것이, 자식 클래스에서도 접근 불가이니까.

  • 참고로 @Override 어노테이션을 적어주면 오버라이딩이 제대로 구현되었는지를 컴파일 타임에 검증한다.

  • 접근 제어자를 설정하는데 별도의 규칙이 존재한다.

    • 자식 클래스에서 오버라이딩하는 메소드의 접근 제어자는 부모 클래스보다 더 좁게 설정할 수 없다.

    • 예외(Exception)은 부모 클래스의 메소드보다 많이 선언할 수 없다.

    • static 메소드를 인스턴스의 메소드로 또는 그 반대로 바꿀 수 없다.

Last updated