🐢
과제3) @Override 꼭 적어야 할까요?
July 29, 2023
2일차 과제를 제출하면서 강사님께 질문을 드렸다.
당연히 @Override가 붙어져 있어야 한다고 생각했기 때문이다.
돌아온 대답은..!
다 계획이 있으신 거였다😎
그래서 3일차의 과제는~!
- 오버라이딩이 뭔가요?
- 여러분들이 생각하실 때, 오버라이딩을 구현하려면 @Override를 꼭 적어야 하나요?
1. 오버라이딩이란?
하위 클래스가 상위 클래스의 메소드를 재정의해서 사용하는 것
2. 오버라이딩을 구현하려면 @Override를 꼭 적어야 하나요?
class Parent {
public void hello(String name) {
System.out.println("안녕하세요, 저는 " + name + "입니다.");
}
}
class Child extends Parent{
// @Override가 있으면 어떻고 없으면 어떤가요?
public void hello() {
System.out.println("안녕!");
}
}
@Override
어노테이션은 필수는 아니지만, 작성을 해주면 컴파일 단계에서 개발자의 실수를 방지할 수 있다.
- Parent 클래스의 hello 메소드를 재정의해서 사용하고 싶은 경우(오버라이딩)
- 매개변수, 리턴타입, 메소드명을 상위 클래스의 메소드와 동일하게 작성한다면
@Override
없이도 오버라이딩된 메소드라고 인식이 된다. - 하지만 위 코드는 개발자의 실수로 매개변수가 다르게 작성되어서 오버라이딩하고 싶은 개발자의 의도와 다르게 동작한다! 이때
@Override
를 붙여준다면 컴파일 오류가 발생하게 되어 실수를 잡아낼 수가 있다.
- 매개변수, 리턴타입, 메소드명을 상위 클래스의 메소드와 동일하게 작성한다면
- Child 클래스의 hello 메소드로 사용하고 싶은 경우(오버로딩)
- 이 경우에는 위 코드 그대로 사용해도 문제가 없다.
참고 사진
매개변수, 리턴타입, 메소드명을 동일하게 하고 @Override
를 붙이지 않은 경우 : 컴파일 오류 없이 Parent 클래스의 hello 메소드를 override 한 것으로 인식된다.
매개변수가 다른데 @Override
를 붙인 경우 : 컴파일 오류가 발생한다.