클래스 내에서 final로 선언된 필드나 @NonNull 어노테이션이 붙은 필드에 대해 생성자를 자동으로 생성합니다. 주로 불변 객체(Immutable Object)를 만들 때 유용하게 사용됩니다.
해당 클래스의 모든 필드를 매개변수로 받는 생성자가 자동으로 생성됩니다.
import lombok.*;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MyDTO {
private String name;
private int age;
}
// 자동 생성
public MyDTO(String name, int age) {
this.name = name;
this.age = age;
}
클래스에 기본 생성자를 생성합니다. DTO에서 JSON 형태의 데이터를 자바 객체로 매핑할 때 유용하게 사용됩니다.
import lombok.*;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MyDTO {
private String name;
private int age;
}
이후에는 이 DTO 클래스의 인스턴스를 매개변수 없이 생성할 수 있습니다.
↗️ @Controller와 @RestController 차이
이 어노테이션을 메서드나 클래스에 추가하면, 해당 메서드나 클래스의 작업은 하나의 트랜잭션으로 묶이게 됩니다. 즉, 메서드 내에서 실행되는 데이터베이스 작업은 모두 하나의 트랜잭션으로 처리됩니다.
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class MyService {
private final MyRepository myRepository;
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
@Transactional
public void saveData(MyEntity data) {
myRepository.save(data);
}
}
위의 코드에서 saveData 메서드에 @Transactional 어노테이션을 추가하면, 이 메서드에서 실행되는 데이터베이스 작업은 하나의 트랜잭션으로 처리됩니다. 따라서 메서드 내에서 myRepository.save(data)가 실행될 때, 이 작업은 트랜잭션 내에서 처리되어 데이터베이스에 저장됩니다. 만약 예외가 발생한다면 트랜잭션이 롤백되어 저장된 데이터가 취소됩니다.