![[Java] @NoArgsConstructor(access = AccessLevel.PROTECTED)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEB68d%2FbtsM4eqe1yy%2FEQNkS2tqllakkI5iCZ3y7k%2Fimg.jpg)
[Java] @NoArgsConstructor(access = AccessLevel.PROTECTED)Language/Java2025. 4. 1. 18:33
Table of Contents
@NoArgsConstructor(access = PROTECTED)는 Lombok에서 제공하는 애노테이션으로, 기본 생성자(매개변수가 없는 생성자)를 접근 제어자 protected로 생성해주는 기능을 한다.
핵심 의미
@NoArgsConstructor(access = AccessLevel.PROTECTED)
이 코드는 다음과 같은 생성자를 자동 생성한다.
protected 클래스이름() {
}
즉, 생성자 메서드를 일일이 작성하지 않아도 되고, 접근 제어자까지 명확하게 설정 가능하다.
사용 목적
JPA 엔티티용 기본 생성자
- JPA는 엔티티 객체를 만들 때 기본 생성자가 필요하다.
- 하지만 외부에서 마음대로 new로 객체를 생성하는 건 막고 싶을 때 protected를 쓴다.
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member {
@Id
@GeneratedValue
private Long id;
private String name;
public Member(String name) {
this.name = name;
}
}
객체 생성 통제를 위한 설계(생성자 캡슐화)
- 생성자를 protected로 감춰서 정적 팩토리 메서드나 Builder 패턴만 통해 생성하게 만든다.
- 외부에서 new를 막아 객체 생성 통제가 가능해진다.
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
private String name;
public static User create(String name) {
User user = new User();
user.name = name;
return user;
}
}
정적 팩토리 메서드
클래스의 인스턴스를 생성할 때 new 키워드를 직접 사용하는 대신, static 메서드를 통해 객체를 생성하여 반환하는 방법이다.
"생성자는 숨기고, 객체 생성을 대신해주는 static 메서드를 만든다"는 개념이다.
User user = User.of("홍길동");
public class User { private String name; private User(String name) { // 생성자는 private으로 숨김 this.name = name; } public static User of(String name) { return new User(name); // 대신 이 메서드로 생성 } }
테스트 코드에서는 하위 클래스에서 생성 가능
- protected는 같은 패키지 또는 하위 클래스에서는 접근 가능
- 테스트 코드에서 생성자를 사용하는 경우 유용하다
'Language > Java' 카테고리의 다른 글
[Java] 추상클래스와 인터페이스 차이점 (0) | 2025.03.26 |
---|---|
[Java] 정규 표현식 클래스 (0) | 2025.03.25 |
[Java] 형식(Format) 클래스 (0) | 2025.03.25 |
[Java] BigInteger 클래스 (0) | 2025.02.28 |
[Java] Optional<T> (1) | 2024.03.15 |