![[디자인패턴] 일급 컬렉션이란? +리팩토링](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FETkB4%2FbtsHxqpgu2U%2FmcsLkFWGniEhkj9VwHZuJ0%2Fimg.png)
[디자인패턴] 일급 컬렉션이란? +리팩토링Back-end/etc..2024. 5. 22. 12:54
Table of Contents
✅ Git
https://github.com/ellaCoo/mvc_programming/commit/e128b42454a77bd972e3fb56e4743bbbb31c1949
✅ 개념
- 컬렉션을 포함하는 클래스가 단 하나의 컬렉션만을 멤버 변수로 가지는 디자인 패턴
- 이 패턴은 컬렉션을 직접 사용하는 대신, 컬렉션을 포장하는 클래스를 통해 사용함으로써 다양한 이점을 제공
- 일급 컬렉션은 주로 코드의 가독성, 유지보수성, 객체 지향 설계의 원칙을 준수하기 위해 사용
✅ 예제
일급 컬렉션(Courses)
: 리스트 형태로 된 Course 정보만 인스턴스 변수로 가지는 클래스이다.
→ 이 정보를 가지고 처리할 수 있는 책임들이 Courses라는 일급 컬렉션 밑으로 모두 이동함
import java.util.List;
// 일급컬렉션 Courses
public class Courses {
private final List<Course> courses;
// 여기에 필드가 하나 더 있으면 안됨!!!!!
public Courses(List<Course> courses) {
this.courses = courses;
}
public double multiplyCreditAndCourseGrade() {
double multipliedCreditAndCourseGrade = 0;
for (Course course : courses) {
multipliedCreditAndCourseGrade += course.multiplyCreditAndCourseGrade();
}
return multipliedCreditAndCourseGrade;
}
public int calculateTotalCompletedCredit() {
return courses.stream()
.mapToInt(Course::getCredit)
.sum();
}
}
public class Course {
private final String subject; // 과목명
private final int credit; // 학점
private final String grade; // 성적 (A+, A, B+,...)
public Course(String subject, int credit, String grade) {
this.subject = subject;
this.credit = credit;
this.grade = grade;
}
public int getCredit() {
return credit;
}
public double getGradeToNumber() {
double grade = 0;
switch (this.grade) {
case "A+":
grade = 4.5;
break;
case "A":
grade = 4.0;
break;
case "B+":
grade = 3.5;
break;
case "B":
grade = 3.0;
break;
case "C+":
grade = 2.5;
break;
case "C":
grade = 2.0;
break;
}
return grade;
}
public double multiplyCreditAndCourseGrade() {
return credit * getGradeToNumber();
}
}
→ 일급 컬렉션 사용하여 리팩토링
'Back-end > etc..' 카테고리의 다른 글
[운영체제] 싱글턴 객체에서 상태를 유지하게 설계하면 안되는 이유? (레이스 컨디션) (0) | 2024.05.23 |
---|---|
[HTTP] http는 왜 stateless, connectionless할까? (1) | 2024.05.23 |
[LINUX] jar파일 컴파일 버전 찾기 (0) | 2022.04.27 |
[MyBatis] foreach 사용해서 List<Map<>> INSERT하기 (0) | 2022.02.11 |