Java @Override 어노테이션
선수학습(1개)
요약
Java @Override 어노테이션의 역할과 사용법을 알아봅니다. 없어도 오버라이딩은 동작하지만, 붙이면 메서드 이름 오타를 컴파일 에러로 잡아줍니다.
핵심 정리
| 개념 | 설명 |
|---|---|
@Override | "이 메서드는 부모 메서드를 재정의한 것"이라고 컴파일러에 알리는 표시 |
| 없어도 동작 | @Override가 없어도 오버라이딩은 정상 작동 |
| 붙이는 이유 | 메서드 이름이나 매개변수를 잘못 쓰면 컴파일 에러로 잡아줌 |
@Override란? 기초
@Override는 Java의 어노테이션(annotation, 주석) 중 하나입니다. 어노테이션은 코드 자체의 동작을 바꾸지 않지만, 컴파일러1에게 "이 코드는 이런 용도야"라고 알려주는 메모 같은 것입니다. @ 기호로 시작합니다.
@Override를 메서드 위에 붙이면 컴파일러에게 "이 메서드는 부모 클래스의 메서드를 오버라이딩(재정의)한 것입니다"라고 알려줍니다.
아래 코드에서 public void show()는 메서드 선언 부분입니다. 메서드 선언 방법을 모른다면 먼저 확인하세요. extends는 부모 클래스를 지정하는 키워드로, Java 상속에서 자세히 다룹니다.
왜 붙이는 걸까? 기초
@Override가 없어도 오버라이딩(재정의)은 정상 동작합니다. 그런데 @Override를 안 붙이면 오타를 못 잡는 위험이 있습니다. 메서드 이름이나 매개변수2를 실수로 잘못 쓰면 문제가 됩니다.
@Override가 없을 때 — 오타를 못 잡음
컴파일러는 의도를 추측하지 않고, 이름이 다르면 다른 메서드로 취급합니다. 그래서 shwo()를 "Child에 새로 정의한 메서드"로 판단합니다. 에러 없이 통과하지만, 오버라이딩(재정의)은 일어나지 않습니다.
실제로 p.show()를 호출하면 Child가 아닌 Parent의 show()가 실행되어 "Parent"가 출력됩니다.
@Override가 있을 때 — 컴파일 에러로 잡아줌
@Override가 붙어있으면 컴파일러가 "Parent에 shwo라는 메서드가 없는데요?"라고 에러를 발생시킵니다. 오타를 바로 발견할 수 있습니다.
실제 컴파일 에러 메시지는 아래와 같이 나타납니다.
정리
| 상황 | @Override 없음 | @Override 있음 |
|---|---|---|
| 메서드 이름 정확 | 오버라이딩 동작 | 오버라이딩 동작 |
| 메서드 이름 오타 | 새 메서드로 인식 (버그) | 컴파일 에러 (바로 발견) |