Static class
static 클래스의 주기
Class loader에 올라가고 a.class 안에 static을 사용하게 되면 a라는 class가 사라지지 않는이상 지속되게 된다. 또한 예외적으로 string 같은 경우에는 final 이기 때문에 a.class가 사라지게 되더라도 String pool에 저장된다. 그것으로 인해 a.clss가 사라지게 되더라도 String 은 사라지지 않게된다. 하지만 integer같은경우는 gc에서 처리를 해준다.
@Getter
public static class UpdateUserServiceRequest extends UpdateUserRequest {
@Delegate
private final UpdateUserRequest request;
private final User user;
public UpdateUserServiceRequest(Requests.UpdateUserRequest request, User user) {
this.request = request;
this.user = user;
}
package com.ecoletree.et.system.service.user.dto;
import com.ecoletree.et.system.model.user.User;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
public class Requests {
@Getter
public static class DeleteAnotherUserRequest {
private final User user;
private final Long userId;
public DeleteAnotherUserRequest(User user, Long userId) {
this.user = user;
this.userId = userId;
}
}
@Getter
public static class DeleteUsersRequest {
private List<Long> userIds;
}
@Getter
public static class DeleteUsersServiceRequest {
private final User user;
private final List<Long> userIds;
public DeleteUsersServiceRequest(User user, DeleteUsersRequest request) {
this.user = user;
this.userIds = request.getUserIds();
}
}
@Getter
@NoArgsConstructor
public static class UpdateUserPasswordRequest {
private String previousPassword;
private String changePassword;
private String checkPassword;
}
@Getter
@RequiredArgsConstructor
public static class UpdateUserPasswordServiceRequest {
private final String previousPassword;
private final String changePassword;
private final String checkPassword;
private final User user;
public UpdateUserPasswordServiceRequest(UpdateUserPasswordRequest request, User user) {
this.previousPassword = request.getPreviousPassword();
this.changePassword = request.getChangePassword();
this.checkPassword = request.getCheckPassword();
this.user = user;
}
}
@JsonIgnoreProperties(ignoreUnknown =true)
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public static class UpdateUserRequest {
@NotNull
private String name;
@NotNull
private String email;
private String emailSecondary;
@NotNull
private int userNumber;
@NotNull
private String phone;
private String address;
private String birthday;
private String position;
private String medicalIssue;
private String emergencyName;
private String emergencyRelationship;
private String emergencyPhone;
private String englishName;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date joinDate;
private String groupName;
private String departmentName;
}
@Getter
public static class UpdateUserServiceRequest extends UpdateUserRequest {
private final User user;
public UpdateUserServiceRequest(Requests.UpdateUserRequest request, User user) {
this.name = request.getName();
this.email = request.getEmail();
this.emailSecondary = request.getEmailSecondary();
this.userNumber = request.getUserNumber();
this.phone = request.getPhone();
this.address = request.getAddress();
this.birthday = request.getBirthday();
this.position = request.getPosition();
this.medicalIssue = request.getMedicalIssue();
this.emergencyName = request.getEmergencyName();
this.emergencyRelationship = request.getEmergencyRelationship();
this.emergencyPhone = request.getEmergencyPhone();
this.englishName = request.getEnglishName();
this.joinDate = request.getJoinDate();
this.groupName = request.getGroupName();
this.departmentName = request.getDepartmentName();
this.user = user;
}
}
}
static of