https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Override.html
Override (Java SE 17 & JDK 17)
Indicates that a method declaration is intended to override a method declaration in a supertype. If a method is annotated with this annotation type compilers are required to generate an error message unless at least one of the following conditions hold: Th
docs.oracle.com
공식문서내용 :
@Target(ElementType.METHOD) : 오버라이드 어노테이션이 메소드 레벨에서만 사용될 수 있음을 나타낸다.
@Retentation(RetentationPolicy.SOURCE) : 오버라이드 어노테이션이 소스코드 레벨에서만 유지 될 수 있음을 나타낸다.
컴파일 된 코드에서는 어노테이션 정보가 사라진다.
@Override 어노테이션은 메소드 선언이 상위 클래스의 메소드 선언을 오버라이드하도록 의도되었음을 나타냅니다. 이 어노테이션을 사용하면, 컴파일러는 다음 중 하나 이상의 조건이 충족되지 않으면 오류 메시지를 생성해야 합니다:
• 메소드가 상위 타입에서 선언된 메소드를 오버라이드하거나 구현한다.
• 메소드의 시그니처가 Object에서 선언된 public 메소드와 override-equivalent하다.
class Parent {
public void hello(String name) {
System.out.println("안녕하세요, 저는 " + name + "입니다.");
}
}
class Child extends Parent{
// @Override가 없을 경우? 있을 경우?
public void hello() {
System.out.println("안녕!");
}
}
위의 예시 코드에서 Parent의 클래스에서 상속받아 Child에서 hello(String name) 메소드를 오버라이드 하고 싶을때를 가정하고,
@Override 어노테이션이 없을 경우에서 Child 클래스의 hello(String name) 메서드의 매개변수를 빠트려 hello() 라고 작성을 했다고 가정하자.
그렇다면 컴파일러는 Child 클래스의 hello()는 Parent 클래스로부터 상속 받은 메소드가 아닌 새로 정의한 메소드라고 이해하고 오류를 뱉지 않을 것이다.
하지만, @Override 어노테이션이 있을 경우엔,
Method does not override method from its superclass 와 같은 에러 메시지를 보이게 된다.
오타가 발생했을때와 같은 개발자의 실수로 작동 방식이 바뀌어 버릴 수 있는 상황을 막아 줄 수 있다.
즉, @Override는 컴파일러에게 의도적으로 오류를 발생시켜 사람의 실수를 막게 해주는 역할이 있다.
'공부 > CS 기초이론' 카테고리의 다른 글
[JAVA / Spring] DDD설계와 SQL중심설계 (0) | 2023.04.05 |
---|---|
[JAVA / Spring] DI, IOC (0) | 2023.04.04 |
[JAVA 기초] 클래스 메소드와 인스턴스 메소드 (0) | 2023.03.29 |
[JAVA 기초] 인터페이스에 대해 간단하게 (0) | 2023.03.28 |
[JAVA 기초] 객체 지향의 특징 (0) | 2023.03.28 |