์ฒ์์๋ ์ด๋ ํด๋์ค๋ก DTO๋ฅผ ๊ด๋ฆฌํ๋๋ฐ, ์ฝ๋์ ์ค๋ณต์ด ์ ํ ์ค์ด๋ค์ง ์๊ณ ์ฌ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํด์ ์ ๋ง ํ์ผ๋ง ์ค์ด๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋์ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
1. LectureRequestDTO
(1) ๊ธฐ์กด ์ฝ๋ ๋ฐ ์์ ํ ๋ถ๋ถ
@Data
@Schema(description = "๊ฐ์ ๊ฐ์ค/์กฐํ/์์ /์ญ์ ์ ์
๋ ฅ๋ฐ๋ ์์")
@Getter
public class LectureRequest {
@Data
@NoArgsConstructor
public static class LectureCreateForm {
// ๊ฐ์ ๊ฐ์ค ์ ์
๋ ฅ๋ฐ๋ ํผ ์์
private Integer userId; // ๊ฐ์ ๊ฐ์ค์์ ํ์๋ฒํธ
@NotNull
private String title;
@NotNull
private String description;
@NotNull
private LocalDate startDate;
@NotNull
private LocalDate endDate;
@NotNull
private ArrayList<SessionRequest.SessionCreateForm> lectureTime;
@Builder
public LectureCreateForm(Integer userId, String title, String description, LocalDate startDate, LocalDate endDate, ArrayList<SessionRequest.SessionCreateForm> lectureTime){
this.userId = userId;
this.title = title;
this.description = description;
this.startDate = startDate;
this.endDate = endDate;
this.lectureTime = lectureTime;
}
public Lecture toEntity(User user){
return Lecture.builder()
.user(user)
.title(title)
.description(description)
.startDate(startDate)
.endDate(endDate)
.lectureTime(lectureTime.toString())
.build();
}
}
@Data
@NoArgsConstructor
public static class LectureUpdateForm {
// ๊ฐ์ ์์ ์ ์
๋ ฅ๋ฐ๋ ํผ ์์
@NotNull
private String content;
@NotNull
private LocalDate startDate;
@NotNull
private LocalDate endDate;
@NotNull
private ArrayList<SessionRequest.SessionCreateForm> lectureTime;
@Builder
public LectureUpdateForm(String content, LocalDate startDate, LocalDate endDate, ArrayList<SessionRequest.SessionCreateForm> lectureTime){
this.content = content;
this.startDate = startDate;
this.endDate = endDate;
this.lectureTime = lectureTime;
}
}
// Read, Delete๋ URL์ lectureID๊ฐ ํฌํจ๋์ด์์ => ๋ฐ๋ก requestDto ๋ง๋ค ํ์ X
}
๐@Data ์ ๋ ธํ ์ด์ ๊ณผ @Getter ์ ๋ ธํ ์ด์ ์ ์ค๋ณต
๐๋ถํ์ํ ์ฃผ์
๐์ ์ฝ์กฐ๊ฑด์ ๋ง์ง ์๋ ๊ฒ์ฆ ์ด๋ ธํ ์ด์
๐์ด๋ ค์๋ ์์ฑ์
๐๊ธฐ์กด ๊ท์ฝ์ ๋ง์ง ์๋ ํ๋๋ช (description)
์ํฐํฐ์์๋ ํ๋๋ช ์ content์์ description์ผ๋ก ์์ ํ๋๋ฐ, ์๊ฐํด๋ณด๋ DTO๋ ํ๋๋ช ์ด ๊ณง ํ๋ก ํธ์์ ๊ท์ฝ์ด๋ผ ํจ๋ถ๋ก ์์ ํ ์๊ฐ ์์๋ค. ๊ทธ๋์ DTO๋ ๋ค์ content๋ก ๋ณ๊ฒฝํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๊ทธ๋ฅ Entity๋ content๋ผ๋ ํ๋๋ช ์ผ๋ก ํต์ผ์ํค๋๊ฒ ์ข์๊น? ๊ณ ๋ฏผํด๋ด์ผ๊ฒ ๋ค.
(2) ์์ ํ ๋ถ๋ถ
// ์์ ์
@Data
@Schema(description = "๊ฐ์ ๊ฐ์ค/์กฐํ/์์ /์ญ์ ์ ์
๋ ฅ๋ฐ๋ ์์")
@Getter
public class LectureRequest {
// ์์ ํ
@Schema(description = "๊ฐ์ ๊ฐ์ค ์ ์
๋ ฅ๋ฐ๋ ์์")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class LectureCreateRequest {
๐ ์ค๋ณต๋ ์ ๋ ธํ ์ด์ ์ ์ ๊ฑฐํ๋ค.
@Data ์ ๋ ธํ ์ด์ ์๋ @Getter๊ฐ ํฌํจ๋์ด ์๋ค. ๋ฐ๋ผ์ ํ์ํ @Getter ์ ๋ ธํ ์ด์ ๋ง ๋จ๊ธด ๋ค, ๋ถํ์ํ ์ ๋ ธํ ์ด์ ์ ์ญ์ ํ๋ค.
๐ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ protected๋ก ์ค์ ํ์ฌ, ๋น๋๋ฅผ ์ด์ฉํ ์ธ์คํด์ค ์์ฑ์ ์ ๋ํ์๋ค.
๊ธฐ๋ณธ ์์ฑ์๋ฅผ public์ผ๋ก ์ด์ด๋๋ฉด, new LectureUpdateRequest()๋ฅผ ํตํด ํ๋๊ฐ ๋น์ด์๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ณธ ์์ฑ์์ ์ฌ์ฉ์ ๋ง์ ์ธ์คํด์ค ์์ฑ ์ ๋น๋๋ฅผ ์ด์ฉํ๋๋ก ํ์๋ค.
// ์์ ์
private Integer userId; // ๊ฐ์ ๊ฐ์ค์์ ํ์๋ฒํธ
@NotNull
private String title;
@NotNull
private String description;
// ์์ ํ
@NotNull(message = "๊ฐ์ ์์ฑ์์ ์์ด๋๊ฐ์ ํ์์
๋๋ค.")
private Integer userId;
@NotBlank(message = "๊ฐ์๋ช
์ ์
๋ ฅํด์ฃผ์ธ์.")
@Max(value = 50, message = "๊ฐ์๋ช
์ ์ต๋ 50์์
๋๋ค.")
private String title;
@NotBlank(message = "๊ฐ์ ์ค๋ช
์ ์
๋ ฅํด์ฃผ์ธ์.")
private String content;
๐ ํ๋์ ์ ์ ํ ์ ์ฝ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ์๋ค.
์ ์ฝ์กฐ๊ฑด์ ์งํค์ง ์์์ ๋ ๋ฃ์ ๋ฉ์ธ์ง๋ ์ถ๊ฐํด๋ณด์๋ค. ์ฌ๊ธฐ์ ๊ฒ์ฆ์ ์งํํ๊ธฐ ๋๋ฌธ์, Entity์ ResponseDTO์์๋ ๋ณ๋ ๊ฒ์ฆ์ ์งํํ์ง ์๋๋ค.
(3) ์์ ๊ฒฐ๊ณผ
@Schema(description = "๊ฐ์ ๊ฐ์ค ์ ์
๋ ฅ๋ฐ๋ ์์")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class LectureCreateRequest {
@NotNull(message = "๊ฐ์ ์์ฑ์์ ์์ด๋๊ฐ์ ํ์์
๋๋ค.")
private Integer userId;
@NotBlank(message = "๊ฐ์๋ช
์ ์
๋ ฅํด์ฃผ์ธ์.")
@Max(value = 50, message = "๊ฐ์๋ช
์ ์ต๋ 50์์
๋๋ค.")
private String title;
@NotBlank(message = "๊ฐ์ ์ค๋ช
์ ์
๋ ฅํด์ฃผ์ธ์.")
private String content;
@NotNull(message = "๊ฐ๊ฐ์ผ์ ์
๋ ฅํด์ฃผ์ธ์.")
private LocalDate startDate;
@NotNull(message = "์ข
๊ฐ์ผ์ ์
๋ ฅํด์ฃผ์ธ์.")
private LocalDate endDate;
@NotNull(message = "๊ฐ์ ์๊ฐ์ ์
๋ ฅํด์ฃผ์ธ์.")
private ArrayList<SessionCreateRequest> lectureTime;
@Builder
public LectureCreateRequest(Integer userId, String title, String content, LocalDate startDate, LocalDate endDate, ArrayList<SessionCreateRequest> lectureTime){
this.userId = userId;
this.title = title;
this.content = content;
this.startDate = startDate;
this.endDate = endDate;
this.lectureTime = lectureTime;
}
public Lecture toEntity(User user){
return Lecture.builder()
.user(user)
.title(title)
.description(content)
.startDate(startDate)
.endDate(endDate)
.lectureTime(lectureTime.toString())
.build();
}
}
@Schema(description = "๊ฐ์ ์์ ์ ์
๋ ฅ๋ฐ๋ ์์")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class LectureUpdateRequest {
@NotBlank(message = "๊ฐ์ ์ค๋ช
์ ์
๋ ฅํด์ฃผ์ธ์.")
@Column(columnDefinition = "TEXT")
private String content;
@NotNull(message = "๊ฐ๊ฐ์ผ์ ์
๋ ฅํด์ฃผ์ธ์.")
private LocalDate startDate;
@NotNull(message = "์ข
๊ฐ์ผ์ ์
๋ ฅํด์ฃผ์ธ์.")
private LocalDate endDate;
@NotNull(message = "๊ฐ์ ์๊ฐ์ ์
๋ ฅํด์ฃผ์ธ์.")
private ArrayList<SessionCreateRequest> lectureTime;
@Builder
public LectureUpdateRequest(String content, LocalDate startDate, LocalDate endDate, ArrayList<SessionCreateRequest> lectureTime){
this.content = content;
this.startDate = startDate;
this.endDate = endDate;
this.lectureTime = lectureTime;
}
}
2. LectureResponseDTO
(1) ๊ธฐ์กด ์ฝ๋ ๋ฐ ์์ ํ ๋ถ๋ถ
@Data
@Getter
@NoArgsConstructor
public class LectureResponse {
@Data
public static class LectureId {
// ๊ฐ์ ์์ฑ, ์ญ์ , ์
๋ฐ์ดํธ ์ ๋ณ๊ฒฝ๋ ๊ฐ์์ ๊ฐ์๋ฒํธ๋ฅผ ์ ๋ฌํด์ฃผ๋ Response Dto
@NotNull
private Integer lectureId;
@Builder
public LectureId(Integer lectureId) {
this.lectureId = lectureId;
}
}
@Data
public static class LectureDetail {
// ๊ฐ์์ ๋ณด ์ธ๋ถ์กฐํ์ฉ Response Dto
@NotNull
private Integer lectureId;
@NotNull
private Integer userId; // ๊ฐ์ ๊ฐ์ค์ ํ์๋ฒํธ
// ๋ฌดํ์ฐธ์กฐ๋ฅผ ๋ง๊ธฐ ์ํด Lecture์ ๋ฉค๋ฒ ๊ฐ์ฒด User์๊ฒ์ PK๋ง ๊ฐ์ ธ์ด
// User ๊ฐ์ฒด๋ฅผ ๋ฃ์ผ๋ฉด ์ฌ๊ธฐ์ User ์ฐธ์กฐ -> User์์๋ List<Lecture> ์ฐธ์กฐ -> List<Lecture>์์ ๋ค์ User ์ฐธ์กฐ -> ... ๋ฌดํ๋ฐ๋ณต!
@NotNull
private String teacher;
@NotNull
private String title; // ๊ฐ์๋ช
@NotNull
private String description; // ๊ฐ์์ค๋ช
@NotNull
private LocalDate startDate; // ์์์ผ์
@NotNull
private LocalDate endDate; // ์ข
๋ฃ์ผ์
private String lectureImg; // ์ธ๋ค์ผ ์ด๋ฏธ์ง
@NotBlank
private JSONArray lectureTime; // ๊ฐ์์๊ฐ
private Integer sessionId;
@Builder
public LectureDetail(Integer lectureId, Integer userId, String teacher, String title, String description, LocalDate startDate, LocalDate endDate, String lectureImg, JSONArray lectureTime) {
this.lectureId = lectureId;
this.userId = userId;
this.teacher = teacher;
this.title = title;
this.description = description;
this.startDate = startDate;
this.endDate = endDate;
this.lectureImg = lectureImg;
this.lectureTime = lectureTime;
}
}
// ๋ด๊ฐ ๊ฐ์คํ ๊ฐ์ ์ค ํ์ฌ ์งํ์ค์ธ ๊ฐ์ ๋ชฉ๋ก ๋ฐํ
@Data
public static class LecturePreview {
@NotNull
private Integer lectureId;
@NotNull
private String title;
@NotNull
private String teacher;
private String lectureImg;
@NotBlank
private JSONArray lectureTime;
// ํ์ฌ ์ฐธ์ฌ๊ฐ๋ฅํ ์์
์ค ๊ฐ์ฅ ์์ ์๋(= ๋๋์ง ์์ ์์
์ค ๊ฐ์ฅ ๋น ๋ฅธ) ์์
private Integer sessionId;
@Builder
public LecturePreview(Integer lectureId, String title, String teacher, String lectureImg, JSONArray lectureTime) {
this.lectureId = lectureId;
this.title = title;
this.teacher = teacher;
this.lectureImg = lectureImg;
this.lectureTime = lectureTime;
}
}
}
๐@Data ์ ๋ ธํ ์ด์ ๊ณผ @Getter ์ ๋ ธํ ์ด์ ์ ์ค๋ณต
๐๋ถํ์ํ ์ฃผ์
๐์ด๋ ค์๋ ์์ฑ์
๐๋ถํ์ํ ๊ฒ์ฆ ์ ๋ ธํ ์ด์
๐Entity -> DTO ๋ณํ ํจ์ ํ์
(2) ์์ ํ ๋ถ๋ถ
// ์์ ์
@Data
@Getter
@NoArgsConstructor
public class LectureResponse {
// ์์ ํ
@Getter
@NoArgsConstructor (access = AccessLevel.PROTECTED)
public class LectureDetailResponse {
๐ ์ค๋ณต๋ ์ ๋ ธํ ์ด์ ์ ์ ๊ฑฐํ๋ค.
๐ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ protected๋ก ์ค์ ํ์ฌ, ๋น๋๋ฅผ ์ด์ฉํ ์ธ์คํด์ค ์์ฑ์ ์ ๋ํ์๋ค.
LectureRequestDTO์์ ์ค๋ช ํ ๋ถ๋ถ์ด๋ฏ๋ก ์ค๋ช ์ ์๋ตํ๋ค.
public static LectureDetailResponse from(Lecture lecture) {
return LectureDetailResponse.builder()
.lectureId(lecture.getLectureId())
.userId(lecture.getUser().getUserId())
.teacher(lecture.getUser().getName())
.title(lecture.getTitle())
.description(lecture.getDescription())
.startDate(lecture.getStartDate())
.endDate(lecture.getEndDate())
.lectureImg(lecture.getLectureImg())
.lectureTime(stringToJsonArray(lecture.getLectureTime()))
.build();
}
๐ Entity -> DTO ๋ณํ ํจ์๋ฅผ ์ํฐํฐ์์ DTO ํด๋์ค๋ก ์ด๋ํ๋ค.
์ํฐํฐ ํด๋์ค์ ์์ ๋๋, DTO๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ์ํฐํฐ ํด๋์ค๋ ํจ๊ป ์์ ํด์ผ ํ๋ค.
ํ์ง๋ง ๋ณํํจ์๋ฅผ DTO ํด๋์ค๋ก ์ด๋์ํค๋ฉด, ์ํฐํฐ ํด๋์ค๋ ๊ทธ๋๋ก ๋๊ณ DTO ํด๋์ค๋ง ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
๐ ๋ถํ์ํ ๊ฒ์ฆ ์ ๋ ธํ ์ด์ ์ ๊ฑฐ
์ด๋ฏธ RequestDTO์์ ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ๊ณ , ์ ์ฅ๋ ๊ฐ๋ค๋ ์ ๋ถ ๊ฒ์ฆ๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ResponseDTO์๋ ํ์ํ์ง ์์ ๊ฒ ๊ฐ์์ ์ ๊ฑฐํ๋ค.
(3) ์์ ๊ฒฐ๊ณผ
@Getter
@NoArgsConstructor (access = AccessLevel.PROTECTED)
public class LectureDetailResponse {
private Integer lectureId;
private Integer userId;
private String teacher;
private String title;
private String description;
private LocalDate startDate;
private LocalDate endDate;
private String lectureImg;
private JSONArray lectureTime;
private Integer sessionId;
public void setSessionId(int sessionId) {
this.sessionId = sessionId;
}
@Builder
public LectureDetailResponse (Integer lectureId, Integer userId, String teacher, String title, String description, LocalDate startDate, LocalDate endDate, String lectureImg, JSONArray lectureTime) {
this.lectureId = lectureId;
this.userId = userId;
this.teacher = teacher;
this.title = title;
this.description = description;
this.startDate = startDate;
this.endDate = endDate;
this.lectureImg = lectureImg;
this.lectureTime = lectureTime;
}
public static LectureDetailResponse from(Lecture lecture) {
return LectureDetailResponse.builder()
.lectureId(lecture.getLectureId())
.userId(lecture.getUser().getUserId())
.teacher(lecture.getUser().getName())
.title(lecture.getTitle())
.description(lecture.getDescription())
.startDate(lecture.getStartDate())
.endDate(lecture.getEndDate())
.lectureImg(lecture.getLectureImg())
.lectureTime(stringToJsonArray(lecture.getLectureTime()))
.build();
}
}
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class LectureIdResponse {
private Integer lectureId;
@Builder
public LectureIdResponse(Integer lectureId) {
this.lectureId = lectureId;
}
public static LectureIdResponse from(Lecture lecture) {
return LectureIdResponse.builder()
.lectureId(lecture.getLectureId())
.build();
}
}
@Getter
@NoArgsConstructor (access = AccessLevel.PROTECTED)
public class LecturePreviewResponse {
private Integer lectureId;
private String title;
private String teacher;
private String lectureImg;
private JSONArray lectureTime;
private Integer sessionId;
public void setSessionId(Integer sessionId) {
this.sessionId = sessionId;
}
@Builder
public LecturePreviewResponse(Integer lectureId, String title, String teacher, String lectureImg, JSONArray lectureTime) {
this.lectureId = lectureId;
this.title = title;
this.teacher = teacher;
this.lectureImg = lectureImg;
this.lectureTime = lectureTime;
}
public static LecturePreviewResponse from(Lecture lecture) {
return LecturePreviewResponse.builder()
.lectureId(lecture.getLectureId())
.title(lecture.getTitle())
.teacher(lecture.getUser().getName())
.lectureImg(lecture.getLectureImg())
.lectureTime(stringToJsonArray(lecture.getLectureTime()))
.build();
}
}
3. SessionReqeustDTO
(1) ๊ธฐ์กด ์ฝ๋ ๋ฐ ์์ ํ ๋ถ๋ถ
@Data
@Getter
public class SessionRequest {
static String[] weekDays = {"", "์", "ํ", "์", "๋ชฉ", "๊ธ", "ํ ", "์ผ"};
@Data
@NoArgsConstructor
public static class SessionCreateForm {
@NotNull
private Integer weekDay;
@NotNull
private Integer startHour;
@NotNull
private Integer startMinute;
@NotNull
private Integer endHour;
@NotNull
private Integer endMinute;
@Builder
public SessionCreateForm(Integer weekDay, Integer startHour, Integer startMinute, Integer endHour, Integer endMinute) {
this.weekDay = weekDay;
this.startHour = startHour;
this.startMinute = startMinute;
this.endHour = endHour;
this.endMinute = endMinute;
}
public String toString(){
StringBuilder sb = new StringBuilder();
String sMinute, eMinute;
if (this.startMinute < 10) {
sMinute = "0"+this.startMinute;
} else {
sMinute = this.startMinute.toString();
}
if (this.endMinute < 10) {
eMinute = "0"+this.endMinute;
} else {
eMinute = this.endMinute.toString();
}
sb.append(weekDays[this.weekDay]+ " ");
sb.append(this.startHour+":"+sMinute + " ~ ");
sb.append(this.endHour+":"+eMinute);
return sb.toString();
}
}
public static class SessionId {
@NotNull
private Integer sessionId;
@Builder
public SessionId(Integer sessionId){
this.sessionId = sessionId;
}
}
}
๐@Data ์ ๋ ธํ ์ด์ ๊ณผ @Getter ์ ๋ ธํ ์ด์ ์ ์ค๋ณต
๐weekDays๋ ๋ถ๋ณ์ด๋ฏ๋ก final์ ๋ถ์ฌ์ค์ผ ํ ๊ฒ ๊ฐ๋ค.
๐toString() ๋ฉ์๋์ ๊ฐ๋ ์ฑ์ ๊ฐ์ ํ๊ณ ์ถ๋ค
(2) ์์ ํ ๋ถ๋ถ
// ์์ ์
@Data
@NoArgsConstructor
public static class SessionCreateForm {
// ์์ ํ
@Schema(description = "ํ์ฐจ ์
๋ ฅ ์ ์
๋ ฅ๋ฐ๋ ์์")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class SessionCreateRequest {
๐ ์ค๋ณต๋ ์ ๋ ธํ ์ด์ ์ ์ ๊ฑฐํ๋ค.
๐ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ protected๋ก ์ค์ ํ์ฌ, ๋น๋๋ฅผ ์ด์ฉํ ์ธ์คํด์ค ์์ฑ์ ์ ๋ํ์๋ค.
// ์์ ์
static String[] weekDays = {"", "์", "ํ", "์", "๋ชฉ", "๊ธ", "ํ ", "์ผ"};
// ์์ ํ
static final List<String> weekDays = Collections.unmodifiableList(Arrays.asList("์", "ํ", "์", "๋ชฉ", "๊ธ", "ํ ", "์ผ"));
๐ weekDays ๋ฐฐ์ด์ unmodifiableList๋ก ๋ณ๊ฒฝํ์ฌ ์์๊ฐ๋ค์ด ๋ณ๊ฒฝ๋์ง ์๋๋ก ํ๋ค.
String์ ์ฐธ์กฐ ํ์ ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋ฐ๋์ง ์๋ ๊ฒ์ด์ง, ํด๋น ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ ์ฅ๋ ๊ฐ์ ๋ฐ๋๋ ๊ฒ ์๋๋ค.
์ด๋ฌํ ์ ์ ๊ณ ๋ คํ์ฌ unmodifiableList๋ก ์ ์ธํ์ฌ ์์๊ฐ๋ค์ด ๋ณ๊ฒฝ๋์ง ์๋๋ก ํ๊ณ , final์ ํตํด weekDays๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๋ณ๊ฒฝ๋์ง ์๋๋ก ํ๋ค. ์กฐํ์ฉ์ด๋ผ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํด์ ์ฌ์ฉํด๋ ์๊ด์๊ธฐ ๋๋ฌธ์ static์ ๊ทธ๋๋ก ์ ์งํ๋ค.
๐ ์ธ๋ฑ์ค๊ฐ 0๋ถํฐ ์์ํ๋๋ก ํ๋ค.
ํ๋ก ํธ์์ 1~7๋ก ๋ณด๋ด์ฃผ๊ฒ ๋ค๊ณ ํด์ ์ ๋ ๊ฒ ํด๋๋๋ฐ, ์ธ๋ฐ์๋ ๋ฌธ์์ด์ ์ถ๊ฐํ๊ธฐ๋ณด๋จ ์ธ๋ฑ์ค์ -1 ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋๊ฒ ๋์๊ฒ๊ฐ์๋ค.
// ์์ ์
public String toString(){
StringBuilder sb = new StringBuilder();
String sMinute, eMinute;
if (this.startMinute < 10) {
sMinute = "0"+this.startMinute;
} else {
sMinute = this.startMinute.toString();
}
if (this.endMinute < 10) {
eMinute = "0"+this.endMinute;
} else {
eMinute = this.endMinute.toString();
}
sb.append(weekDays[this.weekDay]+ " ");
sb.append(this.startHour+":"+sMinute + " ~ ");
sb.append(this.endHour+":"+eMinute);
return sb.toString();
}
// ์์ ํ
public String toString(){
String startMinute = String.format("%02d", this.startMinute);
String endMinute = String.format("%02d", this.endMinute);
return weekDays.get(this.weekDay-1) + " "
+ this.startHour + ":" + startMinute + " ~ "
+ this.endHour + ":" + endMinute;
}
๐toString() ํจ์์ ๊ฐ๋ ์ฑ์ ํฅ์์์ผฐ๋ค.
if๋ฌธ์ ํตํด ์๋ฆฟ์๋ฅผ ๋ง์ถฐ์ฃผ๋ ๋ถ๋ถ์, String.format()์ ์ด์ฉํด ๋ ์ค๋ก ์ค์ฌ๋ณด์๋ค.
๊ธฐ๋ณธ ๋ด์ฅ๋ toString() ๋ฉ์๋์ ๊ตฌํ์ ์ดํด๋ดค๋๋ ๋ฆฌํดํ ๋ +๋ก ์ฒ๋ฆฌํ๊ธธ๋ StringBuilder๋ฅผ ์ง์ฐ๊ณ ๋น์ทํ๊ฒ ์ฒ๋ฆฌํด๋ณด์๋ค.
์ด์ฐจํผ + ์ฐ์ฐ์๋ ๋ด๋ถ์ ์ผ๋ก StringBuilder ํด๋์ค๋ฅผ ์์ฑํ์ฌ ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ์ฝ๋์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ ๊ฒ์ด๋ค. ๋ฐ๋ณต๋ฌธ ๋ด์์ +์ฐ์ฐ์๋ฅผ ์ฐ๋๊ฒ ์๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฌธ์ ๋ ์๋ค.
(3) ์์ ๊ฒฐ๊ณผ
@Schema(description = "ํ์ฐจ ์
๋ ฅ ์ ์
๋ ฅ๋ฐ๋ ์์")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class SessionCreateRequest {
static final List<String> weekDays = Collections.unmodifiableList(Arrays.asList("์", "ํ", "์", "๋ชฉ", "๊ธ", "ํ ", "์ผ"));
@NotNull
private Integer weekDay;
@NotNull
private Integer startHour;
@NotNull
private Integer startMinute;
@NotNull
private Integer endHour;
@NotNull
private Integer endMinute;
@Builder
public SessionCreateRequest(Integer weekDay, Integer startHour, Integer startMinute, Integer endHour, Integer endMinute) {
this.weekDay = weekDay;
this.startHour = startHour;
this.startMinute = startMinute;
this.endHour = endHour;
this.endMinute = endMinute;
}
public String toString(){
String startMinute = String.format("%02d", this.startMinute);
String endMinute = String.format("%02d", this.endMinute);
return weekDays.get(this.weekDay-1) + " "
+ this.startHour + ":" + startMinute + " ~ "
+ this.endHour + ":" + endMinute;
}
}
3. SessionResponseDTO
(1) ๊ธฐ์กด ์ฝ๋ ๋ฐ ์์ ํ ๋ถ๋ถ
@Data
@Getter
@NoArgsConstructor
public class SessionResponse {
@Data
public static class SessionId {
@NotNull
private Integer sessionId;
@Builder
public SessionId(Integer sessionId){
this.sessionId = sessionId;
}
}
public interface SessionIdMapping {
Integer getSessionId();
}
@Data
public static class SessionStartTime {
private LocalDateTime startTime;
@Builder
public SessionStartTime(LocalDateTime startTime) {
this.startTime = startTime;
}
}
}
๐@Data ์ ๋ ธํ ์ด์ ๊ณผ @Getter ์ ๋ ธํ ์ด์ ์ ์ค๋ณต
๐์๋ฌด๋ ๊ตฌํํ์ง ์๋ ์ธํฐํ์ด์ค๊ฐ ์๋ฏธ๊ฐ ์์๊น?
๐์ด๋ ค์๋ ์์ฑ์
(2) ์์ ํ ๋ถ๋ถ
๐ ์ค๋ณต๋ ์ ๋ ธํ ์ด์ ์ ์ ๊ฑฐํ๋ค.
๐ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ protected๋ก ์ค์ ํ์ฌ, ๋น๋๋ฅผ ์ด์ฉํ ์ธ์คํด์ค ์์ฑ์ ์ ๋ํ์๋ค.
๐ ์๋ฌด๋ ๊ตฌํํ์ง ์๋ SessionIdMapping ์ธํฐํ์ด์ค๋ฅผ ์ ๊ฑฐํ์๋ค.
(3) ์์ ๊ฒฐ๊ณผ
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class SessionIdResponse {
private Integer sessionId;
@Builder
public SessionIdResponse(Integer sessionId) {
this.sessionId = sessionId;
}
}
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class SessionStartTimeResponse {
private LocalDateTime startTime;
@Builder
public SessionStartTimeResponse (LocalDateTime startTime) {
this.startTime = startTime;
}
}
DTO ํํธ๋ ํฌ๊ฒ ๊ณ ๋ฏผ๋๋ ๋ถ๋ถ์ ์์๋๋ฐ, ์์กดํ๋ ํด๋์ค๊ฐ ๋ง์์ ์์ ํ๊ธฐ ํ๋ค์๋ค. ํ๋ฒ ์์ ํ ๋๋ง๋ค ๋นจ๊ฐ์ค์ด ํ๋๋...ใ ใ
์ ์ง๋ณด์์ฑ์ด ๋ฌด์์ธ์ง ์ ๋๋ก ๊นจ๋ฌ์๋ค๐ฅน
'๐๐ซ๐จ๐ฃ๐๐๐ญ๐ฌ > ๐๐๐๐จ๐ฎ๐ซ๐ญ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณตํตํ๋ก์ ํธ ๋ฆฌํฉํ ๋ง (1) - Entity (0) | 2023.11.17 |
---|