본문 바로가기

카테고리 없음

Lombok

Lombok 으로 코드를 절약해보자

getter and setter와 Constructor를 어노테이션 태그를 통해 대신 생성할 수있다.

  • Course.java

    Course 클래스 Getter, NoArgsConstructor 적용

package com.sparta.week02_hwk.domain;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.*;

@Getter // getter and setter 를 대신 생성해준다.
@Setter
@NoArgsConstructor // 기본생성자를 대신 생성해준다.
@Entity // 테이블임을 나타냅니다.
public class Course extends Timestamped {

    @Id // ID 값, Primary Key로 사용하겠다는 뜻입니다.
    @GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가 명령입니다.
    private Long id;

    @Column(nullable = false) // 컬럼 값이고 반드시 값이 존재해야 함을 나타냅니다.
    private String title;

    @Column(nullable = false)
    private String name;

//    public Long getId() {
//        return this.id;
//    }
//
//    public String getTitle() {
//        return this.title;
//    }
//
//    public String getName() {
//        return this.name;
//    }
//    public Course() {
//    }
    public Course(String title, String name) {
        this.title = title;
        this.name = name;
    }

    public void update(Course course) {
        this.title = course.title;
        this.name = course.name;
    }
}

 

 

서비스 단 에서는 항상 repository를  멤버변수로 선언해줘야 하는데 

@RequiredArgsConstructor는 이런 final로 선언된 멤버변수를 명시하는 생성자를 자동생성 해준다.

  • CourseService.java

    CourseService 클래스 RequiredArgsConstructor 적용

package com.sparta.week02_hwk.service;

import com.sparta.week02_hwk.domain.Course;
import com.sparta.week02_hwk.domain.CourseRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;

@RequiredArgsConstructor    //final 멤버변수를 고려한 생성자를 자동으로 만들어 줍니다.
@Service // 스프링에게 이 클래스는 서비스임을 명시
public class CourseService {

    // final: 서비스에게 꼭 필요한 녀석임을 명시, 변형 불가.
    private final CourseRepository courseRepository;

    // 생성자를 통해, Service 클래스를 만들 때 꼭 Repository를 넣어주도록
    // 스프링에게 알려줌
//    public CourseService(CourseRepository courseRepository) {
//        this.courseRepository = courseRepository;
//    } //@RequiredArgsConstructor  로 대체

    @Transactional // SQL 쿼리가 일어나야 함을 스프링에게 알려줌
    public Long update(Long id, Course course) {
        Course course1 = courseRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
        );
        course1.update(course);
        return course1.getId();
    }
}