본문 바로가기
Spring

[Spring] Lombok, DTO

by jelliclesu 2024. 7. 17.

  • Lombok
    : JAVA 프로젝트를 진행하는데 거의 필수적으로 필요한 메소드/생성자 등을 자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리
    • Course.java 
      @Getter - Getter 직접 작성 없이 가능
      @NoArgsConstructor - 기본 생성자 직접 작성 없이 가능
    • CourseService.java
      @RequiredArgsConstructor - CourseRepository 받아오는 것 없이 final 선언만으로도 사용 가능
  • DTO(Data Transfer Object)
    : 데이터 교환을 위한 객체로 클래스를 막 건드리지 않고 완충재로 활용하는 것
    • 생성 및 적용
      1. src > main > java > com.sparta.week02 > domain 에 CourseRequestDto 파일 생성
        @NoArgsConstructor
        @Getter
        public class CourseRequestDto {
            private String title;
            private String tutor;
        
            public CourseRequestDto(String title, String tutor) {
                this.title = title;
                this.tutor = tutor;
            }
        }
      2. CourseService.java 변경
        @RequiredArgsConstructor
        @Service
        public class CourseService {
            private final CourseRepository courseRepository;
        
            @Transactional
            public Long update(Long id, CourseRequestDto requestDto) {
                Course course1 = courseRepository.findById(id).orElseThrow(
                        () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
                );
                course1.update(requestDto);
                return course1.getId();
            }
        }
      3. Course.java 변경
        @Getter
        @NoArgsConstructor
        @Entity
        public class Course extends Timestamped {
        
            @Id
            @GeneratedValue(strategy = GenerationType.AUTO)
            private Long id;
        
            @Column(nullable = false)
            private String title;
        
            @Column(nullable = false)
            private String tutor;
        
            public Course(String title, String tutor) {
                this.title = title;
                this.tutor = tutor;
            }
        
            public void update(CourseRequestDto requestDto) {
                this.title = requestDto.getTitle();
                this.tutor = requestDto.getTutor();
            }
        }
      4. Week02Application.java 변경
        @EnableJpaAuditing
        @SpringBootApplication
        public class Week02Application {
        
            public static void main(String[] args) {
                SpringApplication.run(Week02Application.class, args);
            }
        
            @Bean
            public CommandLineRunner demo(CourseRepository courseRepository, CourseService courseService) {
                return (args) -> {
                    courseRepository.save(new Course("프론트엔드의 꽃, 리액트", "임민영"));
        
                    System.out.println("데이터 인쇄");
                    List<Course> courseList = courseRepository.findAll();
                    for (int i=0; i<courseList.size(); i++) {
                        Course course = courseList.get(i);
                        System.out.println(course.getId());
                        System.out.println(course.getTitle());
                        System.out.println(course.getTutor());
                    }
        
                    CourseRequestDto requestDto = new CourseRequestDto("웹개발의 봄, Spring", "임민영");
                    courseService.update(1L, requestDto);
                    courseList = courseRepository.findAll();
                    for (int i=0; i<courseList.size(); i++) {
                        Course course = courseList.get(i);
                        System.out.println(course.getId());
                        System.out.println(course.getTitle());
                        System.out.println(course.getTutor());
                    }
        
                    courseRepository.deleteAll();
                };
            }
        }