`@Data`, `@NoArgsConstructor`, `@AllArgsConstructor`는 스프링 프레임워크와는 직접적으로 관련이 없는 어노테이션들이며, Lombok 라이브러리에 속한 어노테이션입니다. Lombok은 자바 코드에서 반복적으로 작성해야 하는 뼈대 코드(boilerplate code)를 줄이기 위해 사용되는 프로젝트입니다. 각 어노테이션은 다음과 같은 역할을 합니다:
1. `@Data`: `@Data` 어노테이션은 자바 빈(JavaBean) 규칙에 따른 메서드들을 생성해주는 어노테이션입니다. 주로 데이터 객체(data object) 클래스에서 사용되며, 클래스 내의 필드(멤버 변수)들을 자동으로 게터(Getter), 세터(Setter), `toString()`, `equals()`, `hashCode()` 메서드를 생성합니다. 이를 통해 데이터 객체를 간단하게 정의하고 사용할 수 있으며, 코드의 가독성을 높일 수 있습니다.
2. `@NoArgsConstructor`: `@NoArgsConstructor` 어노테이션은 매개변수가 없는 디폴트 생성자(Default Constructor)를 생성합니다. 스프링 빈(Bean)으로 등록한 클래스에서 기본 생성자가 필요한 경우에 사용됩니다. 스프링은 기본 생성자를 통해 빈을 초기화하고 의존성 주입을 수행하기 때문에, 이 어노테이션은 스프링 컨테이너와 함께 사용할 때 편리합니다.
3. `@AllArgsConstructor`: `@AllArgsConstructor` 어노테이션은 모든 필드를 인자로 받는 생성자를 자동으로 생성합니다. 이 생성자는 클래스 내의 모든 필드에 대해 매개변수를 받아 초기화하는 생성자를 생성합니다. 주로 불변(immutable) 데이터 객체를 정의할 때 사용되며, 객체 생성 시 모든 필드를 설정할 수 있도록 합니다.
이러한 Lombok 어노테이션들은 코드 작성을 간소화하고, 코드 중복을 줄이는 데 도움을 줍니다. 이로 인해 코드의 가독성을 높이고, 유지 보수 및 확장성을 향상시킵니다. 스프링 프레임워크와 함께 사용할 수 있지만, 스프링과 직접적으로 연관된 어노테이션이 아닙니다.
사실 이렇게 해기하면 잘 이해가 안간다. 실제 코드를 보면 좀 더 이해가 빠름.
* 어노테이션을 썻을 경우
package com.example.quiz.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Quiz {
/** id 식별 */
private Integer id;
/** 퀴즈 내용 */
private String question;
/** 퀴즈 답 */
private Boolean answer;
/** 작성자 */
private String author;
}
* 어노테이션을 쓰지 않았을 경우
public class Quiz {
private Integer id;
private String question;
private Boolean answer;
private String author;
// 디폴트 생성자: @NoArgsConstructor
public Quiz() {
// 이 생성자는 매개변수 없이 Quiz 객체를 생성합니다.
// 필드는 일반적으로 기본값 또는 null로 초기화됩니다.
}
// 생성자: @AllArgsConstructor
public Quiz(Integer id, String question, Boolean answer, String author) {
this.id = id;
this.question = question;
this.answer = answer;
this.author = author;
}
// Getter 메서드
public Integer getId() {
return id;
}
public String getQuestion() {
return question;
}
public Boolean getAnswer() {
return answer;
}
public String getAuthor() {
return author;
}
// Setter 메서드
public void setId(Integer id) {
this.id = id;
}
public void setQuestion(String question) {
this.question = question;
}
public void setAnswer(Boolean answer) {
this.answer = answer;
}
public void setAuthor(String author) {
this.author = author;
}
// toString() 메서드
@Override
public String toString() {
return "Quiz{" +
"id=" + id +
", question='" + question + '\'' +
", answer=" + answer +
", author='" + author + '\'' +
'}';
}
// equals() 및 hashCode() 메서드
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Quiz quiz = (Quiz) o;
return Objects.equals(id, quiz.id) &&
Objects.equals(question, quiz.question) &&
Objects.equals(answer, quiz.answer) &&
Objects.equals(author, quiz.author);
}
@Override
public int hashCode() {
return Objects.hash(id, question, answer, author);
}
}
'백엔드 > 스프링' 카테고리의 다른 글
스프링 용어 및 짤개념 정리 - 1 (0) | 2023.10.15 |
---|