๐Ÿต java

JAVA | ํ•™์  ๊ณ„์‚ฐ๊ธฐ ์‹ค์Šต - (1)

c0zi 2023. 9. 4. 14:54

์š”๊ตฌ์‚ฌํ•ญ

  • ํ‰๊ท ํ•™์  ๊ณ„์‚ฐ ๋ฐฉ๋ฒ• = (ํ•™์ ์ˆ˜×๊ต๊ณผ๋ชฉ ํ‰์ )์˜ ํ•ฉ๊ณ„/์ˆ˜๊ฐ•์‹ ์ฒญ ์ดํ•™์  ์ˆ˜ โ˜‘๏ธ
  • MVCํŒจํ„ด(Model-View-Controller) ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. โ˜‘๏ธ
  • ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ์‚ฌ์šฉ 

ํ•™์  ๊ณ„์‚ฐ๊ธฐ ์‹ค์Šต์„ ๋‹ค์Œ์˜ ๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋”ฐ๋ผ ๊ตฌํ˜„ํ•ด๋ณด๋ก ํ•œ๋‹ค.

 

๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„

1. ๋„๋ฉ”์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ์ฒด์—๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋Š”์ง€ ๊ณ ๋ฏผ
2. ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ณ ๋ฏผ
3. ๋™์ ์ธ ๊ฐ์ฒด๋ฅผ ์ •์ ์ธ ํƒ€์ž…์œผ๋กœ ์ถ”์ƒํ™”ํ•ด์„œ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋ง ํ•˜๊ธฐ
4. ํ˜‘๋ ฅ์„ ์„ค๊ณ„
5. ๊ฐ์ฒด๋“ค์„ ํฌ๊ด„ํ•˜๋Š” ํƒ€์ž…์— ์ ์ ˆํ•œ ์ฑ…์ž„์„ ํ• ๋‹น
6. ๊ตฌํ˜„ํ•˜๊ธฐ

 

1. ๋„๋ฉ”์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ์ฒด์—๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋Š”์ง€ ๊ณ ๋ฏผ

- ์ด์ˆ˜ํ•œ ๊ณผ๋ชฉ

- ํ•™์  ๊ณ„์‚ฐ๊ธฐ

 

2. ๊ฐ์ฒด๋“ค ๊ฐ„ ๊ด€๊ณ„ ๊ณ ๋ฏผ

์ด์ˆ˜ํ•œ ๊ณผ๋ชฉ๋“ค์„ ํ†ตํ•ด ํ•™์ ์„ ๊ณ„์‚ฐ

 ํ•™์ ๊ณ„์‚ฐ๊ธฐ๊ฐ€ ์ด์ˆ˜ํ•œ ๊ณผ๋ชฉ์„ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง

 

3. ๋™์  ๊ฐ์ฒด๋ฅผ ์ •์  ํƒ€์ž…(ํด๋ž˜์Šค)์œผ๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋ง

์ด์ˆ˜ํ•œ ๊ณผ๋ชฉ : ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์ž๋ฃŒ๊ตฌ์กฐ, ์ค‘๊ตญ์–ดํšŒํ™”

์ด๋Ÿฌํ•œ ๊ณผ๋ชฉ๋“ค์„ ํด๋ž˜์Šค๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ !

 

4. ํ˜‘๋ ฅ ์„ค๊ณ„

์ด์ˆ˜ํ•œ ๊ณผ๋ชฉ(์ธ์ž)์„ ์ „๋‹ฌํ•˜์—ฌ ํ‰๊ท ํ•™์  ๊ณ„์‚ฐ ์š”์ฒญ  

⇒ ํ•™์  ๊ณ„์‚ฐ๊ธฐ : [(ํ•™์ ์ˆ˜×๊ต๊ณผ๋ชฉ ํ‰์ )์˜ ํ•ฉ๊ณ„/์ˆ˜๊ฐ•์‹ ์ฒญ ์ดํ•™์  ์ˆ˜] ๊ณ„์‚ฐ

or

 ํ•™์  ๊ณ„์‚ฐ๊ธฐ : (ํ•™์ ์ˆ˜×๊ต๊ณผ๋ชฉ ํ‰์ )์˜ ํ•ฉ๊ณ„ , ์ˆ˜๊ฐ•์‹ ์ฒญ ์ดํ•™์  ์ˆ˜ ๊ณ„์‚ฐ์‹

 ๊ณผ๋ชฉ(์ฝ”์Šค)๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐ

 

 

์™œ ๋˜‘๊ฐ™์ด ๋”ฐ๋ผํ•ด๋„ ๋‚˜๋งŒ ์ƒˆ๋กœ์šด ์—๋Ÿฌ๋“ค์ด ์ƒ๊ธฐ๋Š” ๊ฑด๊ฐ€ .... (โ–ผ ์—๋Ÿฌ ํ•ด๊ฒฐ์— ์ฐธ๊ณ ํ•œ ๋ถ€๋ถ„)

์ธํ…”๋ฆฌ์ œ์ด ํ•œ๊ธ€ ๊นจ์ง€๋Š” ๋ฌธ์ œ
cannot found assertThat ๋ฌธ์ œ

๐Ÿ“ ์ง„ํ–‰ ๊ณผ์ •

 

์ด๋ฒˆ ํ•™์  ๊ณ„์‚ฐ๊ธฐ ์—ญ์‹œ TDD ๋ฐฉ๋ฒ•๋ก ์„ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜์˜€๋‹ค.

 

GradeCalculatorTest

public class GradeCalculatorTest {
   
    @DisplayName("ํ‰๊ท  ํ•™์ ์„ ๊ณ„์‚ฐํ•œ๋‹ค")
    @Test
    void calculateGradeTest() {
        List<Course> courses = List.of(new Course("OOP", 3, "A+"),
                new Course("์ž๋ฃŒ๊ตฌ์กฐ", 3, "A+"));

        GradeCalculator gradeCalculator = new GradeCalculator(courses);
        double gradeResult = gradeCalculator.calculateGrade();

        assertThat(gradeResult).isEqualTo(4.5);
    }


}

 

๋“ฑ๊ธ‰ ๊ณ„์‚ฐ๊ธฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ class๋ฅผ ๋งŒ๋“ค๊ณ  ์ค€ ๋’ค, ์œ„์™€ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ gradeResult(ํ‰๊ท  ๋“ฑ๊ธ‰)์ด 4.5๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ํ…Œ์ŠคํŠธํ•œ๋‹ค.

 

GradeCalculator

public class GradeCalculator {

    private final List<Course> courses;

    public GradeCalculator(List<Course> courses) {
        this.courses = courses;
    }

    public double calculateGrade() {
        return 4.5;
    }
}

 

GradeCalculator ๋‚ด์˜ calculateGrade() ๋ฉ”์„œ๋“œ๊ฐ€ 4.5๋ฅผ returnํ•˜๋„๋ก ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค.

 

์—ฌ๊ธฐ๊นŒ์ง€ test๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผ๋˜๋ฉด, calcaulateGrade() ๋ฉ”์„œ๋“œ ๊ตฌํ˜„์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

public double calculateGrade() {
    // (ํ•™์ ์ˆ˜×๊ต๊ณผ๋ชฉ ํ‰์ )์˜ ํ•ฉ๊ณ„
    double MultipliedCreditAndCourseGrade = 0;

    for (Course course: courses) {
        MultipliedCreditAndCourseGrade += course.getCredit() * course.getGradeToNumber();

    }

    // ์ด์ˆ˜ ํ•™์ ์˜ ํ•ฉ๊ณ„
    int totalCompletedCredit = courses.stream()
        .mapToInt(Course::getCredit)
        .sum();

    // (ํ•™์ ์ˆ˜×๊ต๊ณผ๋ชฉ ํ‰์ )์˜ ํ•ฉ๊ณ„ / ์ด์ˆ˜ ํ•™์ ์˜ ํ•ฉ๊ณ„
    return MultipliedCreditAndCourseGrade / totalCompletedCredit;
}

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋“ฑ๊ธ‰ ๊ณ„์‚ฐํ•˜๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , course ํด๋ž˜์Šค ๋‚ด getGradeToNumber() ๋ฉ”์„œ๋“œ ๋˜ํ•œ switch-case๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.