Annotation
이전에 의존성으로 Lombok을 추가했는데, 이 것으로 annotation이라는 것을 사용할 수 있다.
annotation은 그 클래스의 역할을 정해주거나, Bean을 생성하거나, 특별한 기능이나 역할 등을 생성해주는데, 가장 쉬운 예로 getter, setter를 생성해 줄 수도 있다.
public class User {
private String id;
private String pw;
}
만약 user이라는 클래스가 있을 때 annotation없이는 getter, setter, 생성자를 모두 만들게 되면
private String id;
private String pw;
public User(String id, String pw) {
this.id = id;
this.pw = pw;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
이렇게 코드가 매우 길어지는 것을 볼 수 있다. 게다가 여기에는 기본 생성자랑 toString은 들어가지도 않았다;; 하지만 annotation을 사용하면
@Getter //getter 생성
@Setter //setter 생성
@Builder //객체 생성
@AllArgsConstructor //모든 인자 가진 생성자
@NoArgsConstructor //아무것도 없는 생성자
@ToString // toString 메소드 추가.
public class User {
private String id;
private String pw;
}
짜잔~ 코드가 반으로 줄었다! 그리고 여기서 더 줄이게 된다면
@Data //getter, setter, toString, EqualsAndHashCode, RequiredArgsConstructor
@Builder //객체 생성
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String id;
private String pw;
}
이렇게 짧게 코드를 작성할 수 있게 된다!
그럼 자주 사용하는 annotation을 정리해보도록 하겠다!
Annotation | 기능 |
@Entity | DB와 연결 / 실제 DB와 매칭될 클래스다! |
@Controller | 컨트롤러의 역할을 수행하는 클래스임을 명시 |
@Test | 실제 기능에는 무관한 테스트 클래스임을 명시 |
@Service | 실제 로직을 수행하는 service 클래스임을 명시 |
@RequiredArgsConstructor | 초기화되지 않은 final변수를 사용하기 위해 사용 |
@Getter, Setter | getter, setter생성 |
@AllArgsConstructor | 모든 매개변수를 가진 생성자 |
@NoArgsConstructor | 매개변수가 없는 생성자 (기본생성자) |
@ToString | toString 생성 |
@ToString(exclude = "컬럼2") | (exclude) 컬럼2의 내용은 출력하지 않겠다! |
@Table(name = "테이블명") | 테이블생성 |
@Id | 테이블의 PK 지정 |
@Column(length = ?, nullable =?) | 컬럼 생성, 컬럼의 길이, null여부 설정 |
@ManyToOne | 1 : N 관계에서 1에게 붙는 어노테이션 게시글 : 댓글 = 1 : N 일 때 게시글에 붙는 어노테이션 |
@RequestMapping("/받을url") | URL에 따른 요청을 어떤 메소드가 처리할 것인지 매핑해줌 @GetMapping, @PostMapping 등... |
@RequestParam | 뷰에서 전달받은 값(파라미터)를 변수로 바인딩, input 태그의 name과 변수명이 일치해야 함 public void userInfo(@RequestParam String name) |
@ModelAttribute | 뷰에서 전달받은 파라미터를 해당 클래스의 맴버변수로 바인딩, input 태그의 name과 변수명이 일치해야 함, Setter이 무조건 존재해야함!! 안그러면 null로 값 받아짐 public void userInfo(@ModelAttribute User user) |
짧은 가방끈으로는 이정도밖에 사용해보지 않았지만! 이정도만으로도 갱장히!!! 갱장히!!! 많은 코드를 줄일 수 있고, 아마 매 프로젝트마다 사용하는 어노테이션이 아닌가 싶다!
반응형