반응형

@Override

  • 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다.
  • 오버라이딩 할 때 메서드 이름을 잘못적는 실수를 하는 경우가 많다.

@Override 애너테이션은 컴파일러 javac.exe 가 사용하는 애너테이션이다.

우리가 오버라이딩 할 때, 메서드 이름을 잘못 적는 실수를 하는 경우가 많다.

예를 들면 Praent클래스에 있는 parentMethod()에서 M 은 대문자인데,
오버라이딩 하려 하다가 실수로 parentmethod()라고 m을 소문자로 썻다.
그러면 이것은 오버라이딩이 아니다. 그냥 새로운 메서드를 만든꼴이 된다.
내가 의도한 것과 다르지만, 컴파일에는 아무 문제가 없다.
그래서 내가 parentMethod()를 호출하려했는데 parentmethod()가 호출되는 일이 발생한다.

이러한 문제를 예방하기 위해 나온것인 @Override 애너테이션 이다.

  • 오버라이딩 할 때는 메서드 선언부 앞에 @Override를 붙이자.

오버라이딩 할 때는, 내가 해당 메서드를 오버라이딩 하는 것이다! 라는 의미로
@Override 애너테이션을 붙여준다.

그러면, 위의 예시처럼 오타 친 경우에 컴파일하면, 컴파일결과가 "해당 메서드는 오버라이딩 한 것이 아니다."
라고 알려준다.

따라서 습관적으로 오버라이딩을 할 때는 꼭 @Override 애너테이션을 붙여주는 것이 좋다.

[Ex12_7]

 


 

@Deprecated

  • 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다.
  • @Deprecated의 사용 예, Date클래스의 getDate()

@Deprecated 애너테이션은 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다.
예를 들어서 Date클래스의 getDate() 메서드가 있다.

@Deprecated 애너테이션이 붙어있는 것은,
해당 메서드를 사용하지 않을 것을 권장한다. 라는 뜻이다.

 

  • @Deprecated가 붙은 대상이 사용된 코드를 컴파일하면 나타나는 메시지

@Deprecated가 붙은 대상이 사용된 코드를 컴파일 하면 위 와같은 메시지가 나타난다.
에러는 아니다. 경고이다.

-Xlint:deprecation 옵션을 넣어서 다시 컴파일하면 자세한 정보를 볼 수 있다.

여기다가 -Xlint:deprecation 옵션을 넣어서 다시 컴파일 해보자

상세정보를 볼 수 있다. 에러가 아니라 경고다.

 


 

@FunctionalInterface

  • 함수형 인터페이스에 붙이면, 컴파일러가 올바르게 작성했는지 체크
    함수형 인터페이스에는 하나의 추상메서드만 가져야 한다는 제약이 있음

@FunctionalInterface 애너테이션은 함수형 인터페이스에 붙이는 애너테이션이다.
오버라이드 애너테이션과 비슷한데, 이것을 붙이면 컴파일러가 체크해준다.

함수형 인터페이스에는 하나의 추상메서드만 가져야 한다는 제약이 있다.
그래서 @FunctionalInterface애너테이션을 사용하면,
컴파일러가 해당 함수형 인터페이스에 하나의 추상메서드만 존재하는지 체크해준다.

그래서 우리가 함수형 인터페이스를 만들 때는,
@FunctionalIterface 애너테이션을 붙여서 하나의 추상 메서드만 작성했는지 컴파일러가 체크하도록 하는 것이 좋다.
만약, 추상 메서드가 0개이거나 2개이상이면 컴파일러가 잘못작성했다고 알려준다.

 


 

@SuppressWarnings

  • 컴파일러의 경고메시지가 나타나지 않게 억제한다.
  • 괄호() 안에 억제하고자 하는 경고의 종류를 문자열로 지정

@SuppressWarnings 애너테이션은 컴파일러의 경고메시지가 나타나지 않게 억제한다.

예를 들어서 "unchecked"와 관련된 경고메시지가 나오는 것을 막으려면
위 코드처럼 작성하면 된다.

ArrayList()는  지네릭 클래스여서 원시클래스로 사용하면 안된다.
<T>를 넣어줘야 한다. 그런데, 지네릭 타입을 지정하지 않아서 "unchecked"라는 종류의 경고가 발생한다.

그런데 @SuppressWarnings애너테이션이 해당 경고메시지가 뜨지 않게 억제한다.

@SuppressWarnings 애너테이션을 붙이는 이유는, 해당 경고를 작성자가 확인했다는 의미이기도하다.
컴파일러가 알려주는 경고를 보고 @SuppressWarnings 애너테이션을 붙인 것이다.
"이 경고는 내가 확인 했다" 라는 의미를 주는 효과가 있다.

 

  • 둘 이상의 경고를 동시에 억제하려면 다음과 같이 한다.

경고 메시지를 여러개 억제하려면 배열처럼 {}치고 문자열을 넣으면 된다.

 

  • '-Xlint' 옵션으로 컴파일하면, 경고메시지를 확인할 수 있다.
    괄호[]안이 경고의 종류. 아래의 경우 rawtypes

@Deprecated 애너테이션에서 했던 것처럼 컴파일할 때 -Xlint 옵션을 주면 자세한 내용을 볼 수 있다.
대괄호 안에 있는 내용이 경고의 종류다.

Deprecated된 메서드가 사용된 곳에
@SuppressWarnings 애너테이션을 이용해서 "deprecation" 경고를 억제해주면,

억제하기전에는 경고가 나왔지만,
@SupressWarnings 애너테이션을 작성하고 난 후에는, 경고메시지가 발생하지 않는 것을 확인할 수 있다.

반응형

'JAVA' 카테고리의 다른 글

애너테이션 타입 정의하기, 애너테이션의 요소  (0) 2022.05.21
메타 애너테이션  (0) 2022.05.11
애너테이션  (0) 2022.05.09
열거형에 멤버 추가하기  (0) 2022.05.09
열거형  (0) 2022.05.08