"@Override 꼭 적어야 할까요?"

ggyu_55·2023년 3월 29일
0

메모

목록 보기
6/46

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() 메서드가 그의 부모 클래스 Parenthello(String name) 메서드를 오버라이드하려던 게 아니라면 문제가 없지만, 만약 오버라이딩을 하려는 의도였다면 그냥 잘 되는갑다~ 하고 지나치는 실수를 범할 수 있다!! (컴파일은 잘 되니까)

컴파일러 입장에서는 이게 오버라이딩을 의도한 함수인지 그냥 자식 클래스에만 있는 이름만 같은 함수인지 구별할 방법이 없다. 문법상 에러는 안 나지만 개발자가 의도한 그림에는 에러가 난 것이다.
@Override 어노테이션은 이런 특정 상황을 컴파일러가 체크할 수 있도록 도와주는 것으로 보인다. 그러므로 결론은

@Override 꼭 적을 필요는 없지만 꼭 적는게 실수를 줄일 수 있다!!


면접 예상질문

OverloadingOverriding을 비교해주세요.

  • 이름이 비슷하다는 이유로 같이 묶여서 비교당하는, 서로 완전히 다른 개념입니다.
    - Overloading 은 같은 이름의 메서드를 다른 기능을로 재사용하는 것입니다.
    - Overriding 은 상위클래스의 메서드 등을 상속받아서 재구현하는 것입니다.

OverloadingOverriding은 하나의 클래스 안에서 둘 다 사용할 수 있나요?

  • 네, 가능합니다.

0개의 댓글