반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스프링 부트
- 객체지향
- 널 허용
- 이메일 본인인증
- map
- 티스토리챌린지
- JPA
- kotlin
- 스프링
- @embededid
- devpi
- string.repeat()
- JPQL
- string?
- java
- ispresent
- entity
- 토큰
- Spring Boot
- javamailsender
- 코틀린
- embededid
- mutablemap
- 복합 키
- 오블완
- Spring
- jpa repository
- email api 구현
- Token
- 자바
Archives
- Today
- Total
DeveloPiano
[Java] @RequiredArgsConstructor와 @NoArgsConstructor : 생성자를 자동으로 관리하는 방법 본문
Develop/Java
[Java] @RequiredArgsConstructor와 @NoArgsConstructor : 생성자를 자동으로 관리하는 방법
DevPi 2024. 7. 31. 19:52반응형
Java 애플리케이션을 개발하면서 클래스의 생성자를 정의하는 것은 매우 흔한 일입니다. 그러나 반복적인 생성자 작성은 귀찮고 번거로울 수 있습니다. 이를 해결하기 위해 Lombok 라이브러리는 생성자를 자동으로 생성해주는 편리한 어노테이션을 제공합니다.
오늘은 그중에서도 @RequiredArgsConstructor와 @NoArgsConstructor에 대해 자세히 살펴보겠습니다.
@NoArgsConstructor: 기본 생성자 자동 생성
정의
@NoArgsConstructor는 매개변수가 없는 기본 생성자를 자동으로 생성해주는 Lombok 어노테이션입니다. 이 어노테이션을 사용하면 클래스에 기본 생성자를 직접 작성할 필요가 없습니다.
사용 예시
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class User {
private String id;
private String name;
private String gender;
private Date birth;
private String phoneNumber;
private Timestamp createdAt;
}
위의 예제에서는 Lombok이 자동으로 다음과 같은 기본 생성자를 생성합니다.
public User() {}
옵션
- force: final 필드나 @NonNull 필드에 기본 값을 설정하여 강제로 기본 생성자를 생성할 수 있습니다.
- access: 생성자의 접근 수준을 지정할 수 있습니다. (예: AccessLevel.PUBLIC, AccessLevel.PROTECTED)
force 속성 사용 예시
import lombok.NoArgsConstructor;
@NoArgsConstructor(force = true)
public class User {
private final String id = "defaultId";
private String name;
private String gender;
private Date birth;
private String phoneNumber;
private Timestamp createdAt;
}
위의 예제에서는 Lombok이 다음과 같은 기본 생성자를 생성합니다.
public User() {
this.id = "defaultId";
}
@RequiredArgsConstructor: 필수 필드 초기화
정의
@RequiredArgsConstructor는 final 필드와 @NonNull 어노테이션이 붙은 필드를 초기화하는 생성자를 자동으로 생성해주는 Lombok 어노테이션입니다. 필요한 필드만 초기화하는 생성자를 쉽게 작성할 수 있습니다.
사용 예시
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class User {
private final String id;
private String name;
private final String gender;
private Date birth;
private String phoneNumber;
private Timestamp createdAt;
}
위의 예제에서는 Lombok이 자동으로 다음과 같은 생성자를 생성합니다.
public User(String id, String gender) {
this.id = id;
this.gender = gender;
}
옵션
- staticName: 생성자를 대신하는 정적 팩토리 메서드를 생성합니다.
- access: 생성자의 접근 수준을 지정할 수 있습니다 (예: AccessLevel.PUBLIC, AccessLevel.PROTECTED).
공통점
- 생성자 자동 생성: 둘 다 Lombok을 사용하여 생성자를 자동으로 생성해줍니다.
- 접근 수준 제어: access 속성을 사용하여 생성자의 접근 수준을 제어할 수 있습니다.
- 코드 간결화: 두 어노테이션 모두 생성자를 직접 작성할 필요가 없어 코드의 간결성과 가독성을 높여줍니다.
차이점
- 생성자 종류:
- @NoArgsConstructor: 매개변수가 없는 기본 생성자를 생성합니다.
- @RequiredArgsConstructor: final 필드와 @NonNull 필드를 초기화하는 생성자를 생성합니다.
- 필드 초기화:
- @NoArgsConstructor: 필드를 초기화하지 않습니다.
- @RequiredArgsConstructor: 지정된 필드를 초기화합니다.
- 사용 목적:
- @NoArgsConstructor: 기본 생성자가 필요한 경우, 예를 들어 JPA 엔티티나 프레임워크가 객체를 인스턴스화할 때 사용합니다.
- @RequiredArgsConstructor: 특정 필드를 반드시 초기화해야 하는 경우, 예를 들어 DI(Dependency Injection) 패턴에서 필요한 필드를 초기화할 때 사용합니다.
결론
- @NoArgsConstructor는 매개변수가 없는 기본 생성자를 자동으로 생성하여, 기본 생성자가 필요한 경우에 유용합니다.
- @RequiredArgsConstructor는 final 필드와 @NonNull 필드를 초기화하는 생성자를 자동으로 생성하여, 특정 필드를 반드시 초기화해야 하는 경우에 유용합니다.
Lombok의 이 두 어노테이션을 상황에 맞게 사용하면 코드의 간결성과 유지보수성을 크게 높일 수 있습니다. 여러분의 프로젝트에서 적극 활용해보세요!
반응형
'Develop > Java' 카테고리의 다른 글
[Java] super 키워드 사용법 (0) | 2024.08.03 |
---|---|
[Java] JPA 엔티티 : 외래키 설정 vs ID 저장 방식 비교 (1) | 2024.08.03 |
[Java] 인터페이스(Interface)와 구현 클래스의 상속 관계 (0) | 2024.07.13 |
[Java] Getter와 Setter : 편리함 속의 함정 (0) | 2024.07.08 |
[Java] Service Implement 와 Interface를 사용하는 이유 (0) | 2024.06.29 |