1. 오버라이딩이 무엇인가요?
2. 오버라이딩을 구현하려면 @Override를 꼭 적어야 하나?
@Override
가 꼭 필요하지는 않을 것 같다... extends
키워드와 메소드 형식의 일치만으로 오버라이딩하는 메소드라는 것을 알 수 있지 않을까?class Parent { public void hello(String name) { System.out.println("안녕하세요, 저는 " + name + "입니다."); } }
class Child extends Parent{ // @Override가 있으면 어떻고 없으면 어떤가요? public void hello() { System.out.println("안녕!"); } }
중요한 점 하나 발견! @Override
어노테이션이 없을 때는 hello()
메서드가 정상적으로 컴파일된다. Child
클래스의 hello()
메서드가 그의 부모 클래스 Parent
의 hello(String name)
메서드를 오버라이드하려던 게 아니라면 문제가 없지만, 만약 오버라이딩을 하려는 의도였다면 그냥 잘 되는갑다~ 하고 지나치는 실수를 범할 수 있다!! (컴파일은 잘 되니까)
컴파일러 입장에서는 이게 오버라이딩을 의도한 함수인지 그냥 자식 클래스에만 있는 이름만 같은 함수인지 구별할 방법이 없다. 문법상 에러는 안 나지만 개발자가 의도한 그림에는 에러가 난 것이다.
@Override
어노테이션은 이런 특정 상황을 컴파일러가 체크할 수 있도록 도와주는 것으로 보인다. 그러므로 결론은
Overloading과 Overriding을 비교해주세요.
Overloading과 Overriding은 하나의 클래스 안에서 둘 다 사용할 수 있나요?