java가 수정 자 대신 @Override 어노테이션을 사용하는 이유는 무엇입니까?


19

@Override새로운 override수정자를 작성하는 대신 Java가 주석 을 사용하는 동기는 무엇입니까 ?

@Override
public String toString() {
   return "";
}

vs.

public override String toString() {
   return "";
}

2
그것은 나중에 생각했다.
Tulains Córdova

답변:


21

@Override는 원래 언어가 아닙니다. 추가해야 할 필요성이 느껴지면 언어에 새 키워드를 추가하는 것보다 일반적인 메커니즘 (주석)을 사용하는 것이 더 쉬웠습니다. 새 키워드를 추가하면 해당 단어를 식별자로 사용하는 프로그램이 중단 될 수 있으므로 항상 호환되지 않는 변경 사항입니다.

첫날부터 재정의 마커를 추가하는 언어에서는 키워드 (예 : Kotlin 및 Scala) 인 경우가 많으며, Java에서는 재정의 마커가없는 이전 Java 버전과 하위 호환성을 유지해야했습니다.


새 키워드를 도입 한 변경 사항이있을 때 재정의가 특수 효과 인 것이 일치하지 않는 것 같습니다. 예를 들어 인터페이스 메소드의 "default"수정 자입니다.
jwa

6
@jwa Not not : default이미 예약 된 키워드였습니다 (스위치 설명에 사용됨). 새로운 키워드를 추가했습니다. 현재로서는 아무 것도하지 않지만 향후 사용을 위해 예약 된 키워드도 있습니다 (const, goto) -JLS §3.9
Michał Kosmulski

3
"예는 Kotlin과 Java입니다"는 오타처럼 보입니다. 예를 들어 Java 대신 Scala를 작성 하시겠습니까?
gnat

6
글로벌 키워드를 추가하면 문제가 발생하지만 코드를 깨지 않고 컨텍스트 키워드로 추가 할 수 있습니다. 하나는 복잡한 구문 분석을 slightlt 것이며, 주석 메커니즘이 충분히 좋았다으로이 작업이 완료되지 않은 가정
JK.

1
@ MichałKosmulski : enum추가 된 키워드가 이전 코드를 손상시킬 수 있음을 기억합니다 . 더 많은 키워드 여기 속보 : stackoverflow.com/questions/16506411
알론 Guralnek

13

당신은 필요하지 않습니다 실제로 동작을 재정의하기 @Override 주석 이 . 단순히 메서드 자체를 변경하지 않고 컴파일러에 대한 메서드 의도의 컨텍스트를 추가하기 때문에 주석입니다.

주석이 없으면 기능을 재정의 하려고 있지만 실수로 약간 다르게 서명하면 실패합니다. 주석을 추가하면이 메서드가 실제로 동작을 재정의하지 않는 경우 오류를 생성하도록 컴파일러에 지시합니다.

따라서 주석으로 완벽하게 이해됩니다.


+1 주석을 통한 경고 비활성화와 마찬가지로 주석을 통한 선택적 경고 / 오류를 활성화 할 수도 있습니다.
Hulk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.