본문 바로가기

DB

[DataBase] @annotation, Lombok 어노테이션의 모든 것

728x90
  • @Entity

- JPA에서 엔티티란, DB 테이블에 대응하는 하나의 클래스라 생각
@Entity가 붙은 클래스는 JPA가 관리해주며,

JPA를 사용해서 DB 테이블과 매핑할 클래스는 @Entity를 꼭 붙여야만 매핑가능

 

- @Entity(name = "Member")

: JPA에서 사용할 엔티티의 이름을 지정

보통은 기본값인 클래스 이름을 사용하지만,  다른 패키지에 이름이 같은 엔티티 클래스가 있다면 이름을 지정해서 충돌하지 않도록 해야함


- @Entity를 사용할 때의 몇가지 주의사항
 : 접근 제어자가 public 혹은 protected 인 기본 생성자가 필수입니다.
 : final 클래스, enum, interface, inner 클래스에는 사용이 불가능합니다

 

 

  • @Table

@Table( name = "MEMBER")

- 엔티티와 매핑할 테이블을 지정

 

  • @Builder

Lombok에서 @AllArgsConstructor, @NoArgsConstructor @Data를 활용해서 생성자를 편리하게 사용할 수 있음

 

- @NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성
- @AllArgsConstructor 어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 만듬
- @RequiredArgsConstructor 어노테이션은 final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만듬

 

하지만, @AllArgsConstructor의 경우 모든 필드를 차례로 담아야한다. 

단점을 보완하기위해 @Builder를 사용
1) 필드의 순서에 상관없이 객체를 생성할 수 있다.
2) 원하는 필드만 파라미터로 객체를 생성할 수 있다.

 

 

  • @Accessors(chain=true)

@Setter를 이용해서 객체를 생성할 때에는 아래와 같이 여러 줄로 setMethod를 생성해야하는 단점이 있음
이러한 단점을 보완하기위해 @Accessors(chain=true)를 사용
1) 일일이 setMethod를 여러 줄로 생성할 필요 없이 Chain형태로 이어서 원하는 setMethod를 생성할 수 있다.
    @Accessors(chain=true)는 Setter를 메서드 체인 역할을 해줍니다. (빌더패턴을 이용)

    ex) user.setEmail().setAccount()....이런식으로 연쇄적로 사용 가능.

 

 

  • @Data

- @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정해주는 매우 유용한 어노테이션
(ex) 역할의 자동적으로 Getter/Setter를 만들어주는 역할)


- 이 어노테이션을 사용하면, 모든 필드를 대상으로 접근자, 설정자가 자동 생성되고,

final 또는 @NonNull 필드 값을 파라미터로 받는 생성자가 만들어지고,

toString, equals, hashCode 메소드가 자동으로 만들어진다.

- @ToString

toString() 메소드를 작성하는 일도 @ToString어노테이션만 붙여주면 자동으로 생성해 준다
@ToString(exclude = "id")와 같이 exclude를 사용하면 toString() 결과에서 id를 제외시킬 수 있다.

 

- @EqualsAndHashCode
equals, hashCode 자동 생성
equals :  두 객체의 내용이 같은지, 동등성(equality) 를 비교하는 연산자
hashCode : 두 객체가 같은 객체인지, 동일성(identity) 를 비교하는 연산자


자바 bean에서 동등성 비교를 위해 equals와 hashcode 메소드를 오버라이딩해서 사용하는데,
@EqualsAndHashCode어노테이션을 사용하면 자동으로 이 메소드를 생성할 수 있다.

 

@EqualsAndHashCode(callSuper = true)로 설정시 부모 클래스 필드 값들도 동일한지 체크하며, 

false(기본값)일 경우 자신 클래스의 필드 값만 고려한다.

 

 

  • @IdClass

- 복합키가 존재하는 Entity에 @IdClass Annotation을 추가해주고, 복합키를 설정할 class명을 정해준다.
또한, 복합키로 지정할 컬럼에 @Id Annotation을 추가한다.

- @IdClass를 사용해서 복합 Primary Key 적용하기

- DB를 설계하다 보면 PK가 여러 개가 되는 경우가 종종 발생.
그럴 때는 Primary Key에게 모두 @Id 어노테이션을 주면 되는데, 무작정 어노테이션을 붙이면 오류를 출력하게 됨
이때 @IdClass를 사용하게 되면 복합키 매핑 가능

 

- ex)
@IdClass(UserAuthority.class)
public class UserAuthority extends BaseTimeEntity implements GrantedAuthority {
    @Id
    private Long userId;
    @Id
    private String authority;
}

728x90