오버로딩 vs 오버라이딩
오버로딩
개념
이름은 같지만 시그니처(파라미터 수, 타입)가 다른 메소드를 중복으로 선언하는 것.
특징
메소드 이름이 같아야함.
시그니처는 달라야함. 파라미터 수가 다르거나 타입이 다르거나, 둘 다 다르거나.
리턴 값은 시그니처에 해당되지 않음.
접근 제어자는 자유롭게(같거나 다르게) 지정할 수 있다.
쓰는 이유
가독성 증가시킴.
같은 기능을 하는 메서드 관리가 쉬워짐.
오버라이딩
개념
부모 클래스의 메소드의 동작 방법을 변경(재정의)하여 우선적으로 사용하는 것
특징
메소드 이름이 같아야함.
시그니처가 같아야함. 파라미터 수, 파라미터의 타입이 같아야한다.
메소드 리턴형이 같아야한다.
오버라이드 하고자 하는 메소드가 상위 클래스에 존재해야 한다.
상속 받은 클래스의 메소드를 오버라이딩할 때, 스태틱 메소드를 오버라이딩 하게 되면 상위 클래스의 메소드가 하이딩 처리된다. 자바에서는 이 하이딩 처리를 권장하지 않는다.
private
메서드는 오버라이딩이 불가하다. 당연한 것이, 자식 클래스에서도 접근 불가이니까.참고로
@Override
어노테이션을 적어주면 오버라이딩이 제대로 구현되었는지를 컴파일 타임에 검증한다.접근 제어자를 설정하는데 별도의 규칙이 존재한다.
자식 클래스에서 오버라이딩하는 메소드의 접근 제어자는 부모 클래스보다 더 좁게 설정할 수 없다.
예외(Exception)은 부모 클래스의 메소드보다 많이 선언할 수 없다.
static 메소드를 인스턴스의 메소드로 또는 그 반대로 바꿀 수 없다.
Last updated