코린이
Published 2023. 4. 19. 14:39
Spring / Annotation 개발/Spring

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)

 

짧은 가방끈으로는 이정도밖에 사용해보지 않았지만! 이정도만으로도 갱장히!!! 갱장히!!! 많은 코드를 줄일 수 있고, 아마 매 프로젝트마다 사용하는 어노테이션이 아닌가 싶다!

 

 

반응형
profile

코린이

@코인아님

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!