인프런 커뮤니티 질문&답변

생각하는자님의 프로필 이미지
생각하는자

작성한 질문수

김영한의 실전 자바 - 중급 2편

문제와 풀이2

문제와 풀이2 질문이요. (분리-고치는 방법에대해서)

해결된 질문

작성

·

76

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요. 문제와 풀이2 번째 ShoppingCart 클래스를 만들면서 어떻게 해야 이 습관이 고쳐질까? 라는 생각에 질문을 드립니다.

영한님의 ShoppingCart 클래스, displayItems()메서드를 보면, 전체가격합을 구할때 따로 메서드를 만들어서(calculateTotalPrice) 하시는 것을 볼수가 있었습니다.

근데 저가 코드를 하는 것을 보면 displayItems()메서드 안에서 계속 합을 구하더라고요.

public void displayItems() {
    int itemsTotal = 0;
    for (Item item : items) {
        System.out.println("상뭄명: " + item.getName() + ", 합계: " + item.getTotalPrice());
        itemsTotal += item.getTotalPrice();
    }
    System.out.println("전체 가격 합: " + itemsTotal);
}

이런식으로요.

이것을 고치는 방법이 있을까요?

답변 부탁 드립니다.

답변 1

1

안녕하세요. 생각하는자님, 공식 서포터즈 David입니다.

강의를 보셔서 아시겠지만 처음부터 전체 가격을 계산하는 메서드를 작성한 게 아닙니다.

하나의 메서드 내에서 전체 가격을 계산하는 로직이 있었는데 그것을 메서드로 추출해 내고 있습니다.

 

소위 객체지향 설계원칙이라고 불리는 SOLID에서 SRP(단일책임원칙)라는 게 있습니다.

질문 주신 것에 적용하자면, 하나의 메서드는 하나의 책임만 가지도록 작성하는 것입니다.

 

예를 들어, displayItems 메서드는 아이템 정보와 아이템 가격들의 총합을 보여주는 책임이 있습니다.

그런데 아이템 가격들의 총합을 보여주려면 아이템 목록을 순회하면서 각 아이템 가격을 가져와 합치는 과정이 필요합니다. 그래서 이 로직을 displayItems 메서드에 포함시켰습니다. 이로인해 displayItems 메서드는 아이템 가격들의 총합을 계산하는 책임도 갖게 되었습니다. 단일책임원칙을 지키기 위해 아이템 가격들의 총합을 계산하는 책임을 별도의 메서드(계산만 담당)로 분리합니다. 책임을 분리함으로써 얻는 장점은 변경에 영향을 받는 범위가 좁아진다는 점입니다. 계산 로직이 변경되었을 때 계산을 책임지는 메서드만 변경되면 됩니다. 이 점은 여러 곳에서 계산 로직이 사용되고 있을 때 빛을 발휘하게 됩니다. 이 부분에 대해서는 객체지향 설계원칙과 관련된 학습이 필요합니다.

 

객체지향 설계원칙, 객체지향 생활체조 등의 키워드로 찾아보시면 여러 자료가 있습니다. 이를 바탕으로 질문자 분의 코드를 작성하는 연습을 하시다보면 또 다른 인사이트가 있을거라 생각됩니다:)

감사합니다.

David님 감사합니다. 계속 문제 풀이 코드를 작성해 보면서 연습을 해보야 겠네요.

생각하는자님의 프로필 이미지
생각하는자

작성한 질문수

질문하기