참치코더의 꿈 메모장

Spring / @Data, @Builder, @Builder.default, ModelMapper 정리 본문

Spring

Spring / @Data, @Builder, @Builder.default, ModelMapper 정리

참치깡 2025. 9. 14. 21:14
728x90

 

@Data 역할

 

 @Data는 Lombok에서 제공하는 편리한 단축 어노테이션이다.

 

포함되는 기능!!!

- @Getter + @Setter -> 모든 필드에 getter/setter 생성

- @ToString -> toString() 생성

- @EqualsAndHashCode -> equals() & hashCode() 생성

- @RequiredArgsConstructor -> final 필드나 @NonNull 필드만 포함하는 생성자 생성

 

 생성자를 생성하는 Lombok 어노테이션 3가지

 

- @NoArgsConstructor : 파라미터 없는 기본 생성자

 

- @AllArgsConstructor : 모든 필드를 파라미터로 받는 생성자

 

- @RequiredArgsConstructor : final 또는 @NonNull 필드만 파라미터로 받는 생성자

 

 

@Builder 역할

 

@ Builder를 쓰면 모든 필드를 빌더로 초기화 시키고 해당 객체의 매개변수에 해당하는 값들을 더욱 쉽게

 집어넣을 수 있다.

 

@Data

@Builder

public class Member {

  private Long id;

  private String name;

 

@Builder.default // 기본값 유지됨, 따로 입력 및 출력이 됨

  private int age = 20;  

}

 

ex1)

   Member m1 = Member.builder().id(1L).name("홍길동").age(35).builder(); (가능)

 

ex2)

   Member m2 = Member.builder().id(1L).name("홍길동").builder();

   m2.setAge(35); (가능)

 

ModelMapper 역할

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@Configuration 
// 이 클래스가 스프링 설정 클래스임을 알려준다.
// 여기서 만든 @Bean 메서드들은 스프링 컨테이너가 관리하는 빈(Bean)으로 등록된다.
public class RootConfig{
    @Bean
    public ModelMapper getMapper(){ // 스프링이 필요할 때마다 자동주입 가능
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration()
        .setFieldMatchingEnabled(true)
 
        // 기본적으로 ModelMapper는 getter/setter 가반으로 매핑
        // 이 옵션을 켜면, 필드 자체 이름을 기준으로 매핑할 수 있음
        // 즉, getter/setter 없어도 private 필드끼리 매칭 가능
 
        .setFieldAccessLevel(org.modelmapper.config.Configuration.AccessLevel.PRIVATE)
 
        // 접근 제한자가 private 인 필드도 접근 가능하도록 허용
        // DTO <-> Entity 매핑 시 필드 직접 접근이 가능해짐
 
        .setMatchingStrategy(MatchingStrategies.LOOSE);
 
        // 매칭 전략을 설정
        // STRICT : 컬럼명이 완전히 일치해야 매핑
        // STANDARD : 적당히 기본 규칙에 따라 매핑
        // LOOSE : 느슨하게 매칭 (비슷한 이름도 매칭해줌)
 
        return modelMapper;
    }
}
 
// 사용하는 이유  DTO <-> Entity 더 쉽게 매칭 및 매핑됨
 
// 사용법 : Board board = modelMapper.map(boardDTO, Board.class); -> Entity 변경
// 사용법 : BoardDTO boardDTO = modelMapper.map(board, BoardDTO.class); -> DTO 변경
 
 
cs
728x90
Comments