ํ์ ๊ณ์ฐ๊ธฐ ์ค์ต - (1)
์๊ตฌ์ฌํญ
- ํ๊ท ํ์ ๊ณ์ฐ ๋ฐฉ๋ฒ = (ํ์ ์×๊ต๊ณผ๋ชฉ ํ์ )์ ํฉ๊ณ/์๊ฐ์ ์ฒญ ์ดํ์ ์ โ๏ธ
- MVCํจํด(Model-View-Controller) ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ๋ค. โ๏ธ
- ์ผ๊ธ ์ปฌ๋ ์ ์ฌ์ฉ โ๏ธ
์ด๋ฒ์๋ ์ ๋ฒ ์๊ฐ์ ์ด์ด ์ผ๊ธ ์ปฌ๋ ์ ์ ์ฌ์ฉํ์ฌ ์๊ตฌ์ฌํญ์ ๋ชจ๋ ์ถฉ์กฑ์์ผ ๋ณด๋๋ก ํ๋ค.
ํ์ ๊ณ์ฐ๊ธฐ ์ค์ต์ ๋ค์์ ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ๋ฐ๋ผ ๊ตฌํํด๋ณด๋ก ํ๋ค.
๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์
1. ๋๋ฉ์ธ์ ๊ตฌ์ฑํ๋ ๊ฐ์ฒด์๋ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ๊ณ ๋ฏผ
2. ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ณ ๋ฏผ
3. ๋์ ์ธ ๊ฐ์ฒด๋ฅผ ์ ์ ์ธ ํ์ ์ผ๋ก ์ถ์ํํด์ ๋๋ฉ์ธ ๋ชจ๋ธ๋ง ํ๊ธฐ
4. ํ๋ ฅ์ ์ค๊ณ
5. ๊ฐ์ฒด๋ค์ ํฌ๊ดํ๋ ํ์ ์ ์ ์ ํ ์ฑ ์์ ํ ๋น
6. ๊ตฌํํ๊ธฐ
5. ๊ฐ์ฒด๋ค์ ํฌ๊ดํ๋ ํ์ ์ ์ ์ ํ ์ฑ ์์ ํ ๋น
⇒ ์ผ๊ธ ์ปฌ๋ ์ ์ ํตํด ์ฑ ์ ํ ๋น
+) ํ๊ธ ์ธ์ฝ๋ฉ ๋ฌธ์ ๋ค์ ๋ฐ์
๐ ์งํ ๊ณผ์
์ด๋ฒ ํ์ ๊ณ์ฐ๊ธฐ ์ญ์ TDD ๋ฐฉ๋ฒ๋ก ์ ๋ฐํ์ผ๋ก ์ค์ต์ ์งํํ์๋ค.
โ๏ธ ๊ฐ์ฒด์๊ฒ ์์ ํ ๋น
calculateGrade()
public double calculateGrade() {
// (ํ์ ์×๊ต๊ณผ๋ชฉ ํ์ )์ ํฉ๊ณ
double MultipliedCreditAndCourseGrade = 0;
for (Course course: courses) {
// ๊ธฐ์กด ๋ฐฉ๋ฒ
// MultipliedCreditAndCourseGrade += course.getcredit() * course.getGradeToNumber;
// -> course ๋ด์์ ์ํํ์ง ์๊ธฐ ๋๋ฌธ์ ์์ง๋๊ฐ ๋ฎ์
// -> ๋น์ทํ ์ฝ๋๋ฅผ ์ฌ๋ฌ ๊ตฐ๋ฐ์์ ์ฌ์ฉํ๊ฒ ๋ ๋ ์์ ์์ ๋ฒ๊ฑฐ๋ก์
// ์์ ํ ๋ฐฉ๋ฒ : ๊ฐ์ฒด์๊ฒ ์์
์์
MultipliedCreditAndCourseGrade += course.multiplyCreditAndCourseGrade();
}
int totalCompletedCredit = courses.stream()
.mapToInt(Course::getCredit)
.sum();
return MultipliedCreditAndCourseGrade / totalCompletedCredit;
}
๋จผ์ , ํ์ ๊ณ์ฐ๊ธฐ ์ค์ต - (1)์์ calculateGrade()๋ฅผ ๊ตฌํํ๋ ๊ฒ๋ณด๋ค ๋ ๊ฐ์ ํ ์ฝ๋์ด๋ค.
๊ธฐ์กด์ ๊ณ์ฐ ๋ฐฉ๋ฒ์ course ๊ฐ์ฒด์์ getter๋ฅผ ์ด์ฉํ์ฌ ํ์ ์์ ๋ฑ๊ธ์ ๊ฐ์ ธ์ค๊ณ calculate ๋ด์์ ๋ ๊ฐ์ ๊ณฑํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์๋ค. ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ์ course ๊ฐ์ฒด ๋ฐ์์ ๊ณ์ฐ์ ์งํํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ง๋๊ฐ ๋ฎ๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
* ์์ง๋ : ๋ชจ๋ ๋ด๋ถ์ ๊ธฐ๋ฅ์ ์ธ ์์ง ์ ๋
์ด๋ ๊ฒ ์์ง๋๊ฐ ๋ฎ์ ๊ฒฝ์ฐ์๋ ์ฐ์ฐ ๊ณผ์ ์ ์์ ํ๋ ๊ฒฝ์ฐ์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ๋ชจ๋ ๋ถ๋ถ์ ์ผ์ผํ ๊ณ ์ณ์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์, ์์ง๋๋ฅผ ๋๊ฒ ์ค๊ณํ๋ ๊ฒ์ด ์ข์ ์ฝ๋๋ผ๊ณ ๋ณผ ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ ์ํด ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌํ์ฌ course ๋ด์์ ์ฐ์ฐ์ ์ํํ๋๋ก ์์ ์ ์์ํ๊ณ ์ด๋ฅผ ๋ฐํ ๋ฐ๋๋ก ์์ ํ์๋ค. course ๊ฐ์ฒด ๋ด์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค.
Course
public double multiplyCreditAndCourseGrade() {
// getter๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌํ์ฌ ํด๋น ๊ฐ์ฒด์๊ฒ ์์
์ ์์
return (credit * getGradeToNumber());
}
โ๏ธ ์ผ๊ธ ์ปฌ๋ ์ ์ฌ์ฉ
์ผ๊ธ ์ปฌ๋ ์ ์ด๋ ?
๋งค๊ฐ๋ณ์๋ก List ํํ๋ก ๋ ํ๋์ ์ธ์คํด์ค ๋ณ์๋ง์ ๊ฐ์ง๋ ํด๋์ค
-> ๋ณ์๊ฐ ์ฌ๋ฌ๊ฐ๊ฐ x, ํด๋น ์ ๋ณด๋ง์ ๊ฐ์ง๊ณ ์์ผ๋ฉด์ List ํํ๋ก ์ฒ๋ฆฌ
GradeCalculator
public class GradeCalculator {
private final Courses courses;
// List๋ก ๋ฐ๋๋ผ๋ ์ผ๊ธ ์ปฌ๋ ์
์ผ๋ก ์ ๋ฌํ๋๋ก ๋ณ๊ฒฝ
public GradeCalculator(List<Course> courses) {
this.courses = new Courses(courses);
}
/*
์๊ตฌ์ฌํญ
- ํ๊ท ํ์ ๊ณ์ฐ ๋ฐฉ๋ฒ = (ํ์ ์×๊ต๊ณผ๋ชฉ ํ์ )์ ํฉ๊ณ/์๊ฐ์ ์ฒญ ์ดํ์ ์
- MVCํจํด(Model-View-Controller) ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ๋ค.
- ์ผ๊ธ ์ปฌ๋ ์
์ฌ์ฉ
*/
public double calculateGrade() {
// (ํ์ ์×๊ต๊ณผ๋ชฉ ํ์ )์ ํฉ๊ณ
double totalMultipliedCreditAndCourseGrade = courses.multiplyCreditAndCourseGrade();
// ์๊ฐ์ ์ฒญ ์ดํ์ ์
int totalCompletedCredit = courses.calculateTotalCompletedCredit();
return totalMultipliedCreditAndCourseGrade / totalCompletedCredit;
}
}
์ผ๊ธ ์ปฌ๋ ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด List ํํ๋ก ์ ๋ฌํ๋ค.
Courses
package org.example;
import java.util.List;
public class Courses {
private final List<Course> courses;
public Courses(List<Course> courses) {
this.courses = courses;
}
public double multiplyCreditAndCourseGrade() {
// refactoring
return courses.stream()
.mapToDouble(Course::multiplyCreditAndCourseGrade)
.sum();
// double multipliedCreditAndCourseGrade = 0;
// for (Course course: courses) {
// multipliedCreditAndCourseGrade += course.multiplyCreditAndCourseGrade();
// }
// return multipliedCreditAndCourseGrade;
}
public int calculateTotalCompletedCredit() {
return courses.stream()
.mapToInt(Course::getCredit)
.sum();
}
}
stream ๋ณต์ต์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ ๋ธ๋ก๊ทธ
https://velog.io/@seongwon97/%EC%9D%BC%EA%B8%89-%EC%BB%AC%EB%A0%89%EC%85%98%EC%9D%B4%EB%9E%80
https://tecoble.techcourse.co.kr/post/2020-05-08-First-Class-Collection/
'๐ต java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] Stack์ด๋ ? (์ฌ์ฉ๋ฒ, ๊ด๋ จ ๋ฌธ์ ํ์ด) (2) | 2024.01.24 |
---|---|
[JAVA] Scanner์ BufferReader ์ ๋ฆฌํด๋ณด์ (0) | 2024.01.07 |
JAVA | ํ์ ๊ณ์ฐ๊ธฐ ์ค์ต - (1) (0) | 2023.09.04 |
JAVA | ์ฌ์น ์ฐ์ฐ ๊ณ์ฐ๊ธฐ ์ค์ต - (2) (0) | 2023.08.19 |
JAVA | ์ฌ์น ์ฐ์ฐ ๊ณ์ฐ๊ธฐ ์ค์ต - (1) (0) | 2023.08.15 |