새로운 용어라 당황했지만 Annotation은 이미 자주 사용했었던 @Override(이미 정의된 메서드를 재정의해서 덮어쓰는 것)를 Annotation이라고 부르는 거였다.
자바 애너테이션(Java Annotaion)은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 보통 @ 기호를 앞에 붙여서 사용한다.
- JDK 1.5 버전 이상에서 사용 가능하다.
- Java Annotation은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신에 포함되어 작동한다.
Annotation은 코드에 특별한 의미를 부여하거나 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용된다. 쉽게 말하자면 메타 데이터를 미리 약속된 형식으로 소스 코드 안에 포함시킨 것이다.
= Annotation은 완전히 정적이어야 한다
public class Animal { public void speak() { } public String getType() { return "Generic animal"; } } //Animal 클래스를 상속받은 자식 클래스 Cat public class Cat extends Animal { @Override // 부모 클래스(Animal)에서 정의된 메서드 speak()을 재정의(Override)한다. public void speak() { System.out.println("Meow"); }
출처: 위키백과
이런 식으로 상속에서도 사용될 수 있고, 인터페이스에서 메서드를 가져와 어노테이션을 할 수 있다.
@Override // 이게 Annotation!! public String toString() { DecimalFormat df = new DecimalFormat("###,###"); String str = String.format("%s | %s원 | %s", name, df.format(price), description); return str; }
이건 내가 물류 과제에서 사용했던 toString()의 @Override의 사용 예시다. 상품의 정보(상품명, 가격, 상품 설명)를 원하는 문자열의 형태로 반환해주도록 변형했다.
: Getter/Setter, toString 메서드나 생성자 등 반복적으로 작성되는 코드를 의미한다.
왜 보일러 플레이트일까...?
내가 아는 그 보일러인가? 해서 어원을 찾아봤다.
신문사업에서 반복적으로 사용하는 텍스트 인쇄부분을 강철판으로 만들어 찍었었는데 이 판떼기를 'Boilerplate'라고 불렀단다.
(출처)
Lombok은 라이브러리다. 마침 Getter/Setter 메서드를 마구마구 구현해놓은 클래스가 있어서 다시 과제 내용을 꺼내와봤다.

클래스 위에 냅다 Lombok 어노테이션(@Getter, @Setter)을 사용하니 오류가 떠 있었다. 그 위에 마우스를 올려주면 인텔리제이가 'lombok을 클래스 경로에 추가'해야 사용할 수 있다고 해서 눌러봤다. 이처럼 Lombok은 Maven 저장소에서 라이브러리를 다운받아야(즉, 프로젝트에 환경설정을 해줘야) 사용할 수 있다.
@Getter / @Setter : 모든 객체의 getter/setter 메서드를 생성해준다.
@ToString : 객체를 String으로 변환해주는 toString 메서드를 생성해준다.
이 내용은 익숙한 메서드들이다.
@NoArgsConstructor : 기본 생성자(매개변수 ❌)를 생성해준다.
@AllArgsConstructor : 모든 필드를 매개변수로 갖는 생성자를 생성해준다.
@RequiredArgsConstructor : final필수 필드만 매개변수로 하는 생성자를 생성해준다.
@Slf4j : 클래스에 Logger 객체를 생성해준다.
실제 실무에서는 System.out.println()보다 로그를 출력하는 걸 선호한다고 하는데...이 Logger를 아직 사용해보지 않아서 좀 더 공부한 뒤 작성하도록 하겠다.