Programming/Spring

[Spring] Annotation (1) (Lombok, JPA)

Jisung Hwang 2022. 12. 8. 03:07
서론

Spring Boot에서는 다양한 Annotation을 통해 사용자의 개발 환경을 편리하게 만들어준다. 

하지만 내가 사용 중인 Intellij에서 '@'을 통해 Annotation의 종류를 본 적이 있는데 많아도 너무 많아서 놀란 적이 있다.

 

Spring Boot를 통해 개발하다보면 많은 Annotation을 만나고 사용할 것이고 이들을 지속적으로 정리하고자 한다. 우선 현재까지 내가 사용했던 것들을 위주로 정리해보자.

Annotation이란?

 

Annotation은 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 한다. Annotation을 활용하여 Spring Framework는 해당 클래스가 어떤 역할인지 정하기도 하고, Bean을 주입하기도 하며, 자동으로 getter나 setter를 생성하기도 한다. 특별한 의미를 부여하거나 기능을 부여하는 등 다양한 역할을 수행할 수 있다.

이러한 Annotation을 통하여 코드량이 감소하고 유지보수하기 쉬우며, 생산성이 증가된다.

 

 

Lombok Annotation

 

  • @NoArgsConstructor

    기본 생성자를 자동으로 추가한다.
    Entity Class를 프로젝트 코드상에서 기본생성자로 생성하는 것은 금지하고, JPA에서 Entity 클래스를 생성하는 것은 허용하기 위해 추가한다.

  • @AllArgsConstructor

    모든 필드 값을 파라미터로 받는 생성자를 추가한다.

  • @RequiredArgsConstructor

    final이나 @NotNull인 필드 값만 파라미터로 받는 생성자를 추가한다.

  • @Getter

    클래스 내 모든 필드의 Getter method를 자동 생성한다.

  • @Setter

    클래스 내 모든 필드의 Setter method를 자동 생성한다.
    Entity 클래스에는 Setter 사용을 지양한다.


  • @ToString

    클래스 내 모든 필드의 toString method를 자동 생성한다.

 

JPA Annotation

 

  • @Entity

    실제 DB의 테이블과 매칭될 클래스임을 명시한다.
    즉, 테이블과 링크될 클래스임을 나타낸다.

  • @Table

    Entity Class에 매핑할 테이블 정보를 알려준다.
    @Table(name = "USER")
    Annotation을 생략하면 클래스 이름을 테이블 이름 정보로 매핑한다.

  • @Id

    해당 테이블의 PK(주요키) 필드를 나타낸다.

  • @GeneratedValue

    PK의 생성 규칙을 나타낸다.

  • @Column

    테이블의 컬럼을 나타내며, 굳이 선언하지 않더라도 해당 클래스의 필드는 모두 컬럼이 된다.
    @Column을 생략하면 필드명을 사용해서 컬럼명과 매핑한다.
    @Column을 사용하는 이유는, 기본값 외에 추가로 변경이 필요한 옵션이 있을 경우 사용한다.