https://youtu.be/i4V8ZI9Undc?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp
📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.
[애너테이션이란?]
- 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공하는 것을 의미한다.
- 특정 프로그램(정보제공, 설정정보)을 위한 것으로 특정 프로그램이 아니라면 영향이 아예 없다.\
- 설정 정보를 XML로 공유할 때 많은 사람들이 수정하기가 번거롭기 때문에 본인이 필요한 설정 정보만 애너테이션으로 설정해서 사용하는 것이 바람직하다.
[애너테이션의 사용 예시]
@Test //애너테이션
public void method() {
}
- @Test 애너테이션은 이 메서드가 단위 테스트 대상임을 테스트 프로그램인(JUnit)에게 알리는 용도다.
[자바 제공 애너테이션]
- 이는 자바에서 제공하는 애너테이션들이다.
[자바 표준 애너테이션]
[@Override]
- 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다.
- 오버라이딩할 때 메서드 이름을 잘못 적는 실수를 하는 경우가 많기 때문에 이를 위해 체크하게 해준다.
- 오버라이딩할 때는 메서드 선언부 앞에 @Override를 붙이자
[@Deprecated]
- 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다.
- 자바는 하위호환성을 중요하게 여기기 때문에 사용하지 않는 메소드를 삭제하지 않고 이런 애너테이션으로 사용하지 않을 것을 표시해주며 사용한다.
- @Deprecated가 붙은 대상이 사용된 코드를 컴파일하면 나타나는 메시지가 있다.
@Deprecated
public int getDate() {
return normalize().getDayOfMonth();
}
[@FunctionalInterface]
- 함수형 인터페이스에 붙이면, 컴파일러가 올바르게 작성했는지를 체크해준다.
- 함수형 인터페이스에는 하나의 추상메서드만 가져야 한다는 제약이 있다.
- 본래 인터페이스는 여러 추상메서드를 가질 수 있다. 그러나 함수형 인터페이스의 경우엔 추상메서드를 하나만 가져야 한다.
- 위의 경우엔 추상메서드를 2개 이상 가지고 있기 떄문에 문제가 생긴다.
- 이를 컴파일러가 체크하게 해준다.
[@SuppressWarnings]
- 컴파일러의 경고메시지가 나오지 않게 억제한다.
- 괄호( ) 안에 억제하고자 하는 경고의 종류를 문자열로 지정한다.
@SuppressWarnings("unchecked") //제네릭스 관련 경고 억제해주는 것
ArrayList list = new ArrayList(); //제네릭 타입 지정하지 않았음
list.add(obj); // 경고 발생해야 하지만 @SuppressWarnings으로 경고 억제시킴
- 경고가 날 것이라는 걸 이미 본인이 알고 있는 상황이라면 이 어노테이션을 사용해도 된다.
[실습]
[컴파일러가 Override 관련 오류를 잡아주게 해주는 @Override 애너테이션]
package javajungsuk;
class Parent {
void parentMethod() {}
}
class Child extends Parent{
@Override
void parentmethod() {} // 조상 메서드의 이름을 잘못적음
}
- 본래는 컴파일러가 이 문제를 체크해주지 않는다.
- 그러나 @Override를 사용해 이 문제를 먼저 체크해주고 오류를 잡아준다
package javajungsuk;
class Parent {
void parentMethod() {}
}
class Child extends Parent{
@Override
void parentMethod() {} // 조상 메서드의 이름을 잘못적음
}
[@Deprecated를 사용한 예제 코드]
package javajungsuk;
class Parent {
void parentMethod() {}
}
class Child extends Parent{
@Override
@Deprecated
void parentMethod() {} // 조상 메서드의 이름을 잘못적음
}
class Java12_7{
public static void main(String[] args) {
Child c = new Child();
c.parentMethod();//
}
}
'Java > 객체지향' 카테고리의 다른 글
[객체지향][애너테이션/Annotation] - 애너테이션 타입 정의하기, 애너테이션의 요소 (0) | 2022.02.25 |
---|---|
[객체지향][애너테이션/Annotation] - 메타 애너테이션(Meta Annotation) (0) | 2022.02.25 |
[객체지향][열거형] - 열거형에 멤버 추가하기 (0) | 2022.02.22 |
[객체지향][열거형] - 열거형(enum) (0) | 2022.02.21 |
[객체지향][제네릭스] - 제네릭 형변환 (0) | 2022.02.20 |