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

jonghyeok097님의 프로필 이미지
jonghyeok097

작성한 질문수

김영한의 실전 자바 - 기본편

문제와 풀이

[기본형과 참조형 문제풀이] 코드에 관한 질문이 있습니다.

해결된 질문

작성

·

78

1

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요!

항상 선생님께서 진행하시는 문제 풀이를 수강한 이후에, 혼자 좀 더 나은 방식으로 만들 수는 없을까 고민을 하는데요,

Method를 배우고 난 이후로, 코드를 대부분 Method로 넘겨서 작성하다 보니 '기능을 전부 Method로 넘겨서 작성하는 것이 진짜 잘 작성한 코드가 맞을까?' 하는 의문이 들었습니다.

아래는 마지막 문제를 제가 코딩한 내용인데요, 두 가지 질문이 있습니다.

  1. 실무적인 관점과 비교해서 아래의 코드처럼 작성하는 방식(모든 기능을 Method에 집약한 방식)이 괜찮은 방식인가요?

  2. 코드의 개선점이 있다면 어떤 점을 개선하면 좋을까요?

항상 좋은 강의 해주셔서 감사합니다!

package ref.ex;

import java.util.Scanner;

public class ProductOrderMain2 {
    public static void main(String[] args) {
        int num = orderCount();
        ProductOrder[] orders = new ProductOrder[num];
        createOrder(orders);
        orderPrint(orders);
    }

    static int orderCount() {
        Scanner scan = new Scanner(System.in);
        System.out.println("-----------------------------------");
        System.out.println("            상품 등록 시스템          ");
        System.out.println("-----------------------------------");
        System.out.print("입력할 주문의 개수를 입력하세요: ");
        int num = scan.nextInt();
        System.out.println();
        return num;
    }

    static void createOrder(ProductOrder[] orders) {
        Scanner scan = new Scanner(System.in);
        for(int i = 0; i < orders.length; i++) {
            orders[i] = new ProductOrder();
            System.out.println((i+1) + "번째 주문 정보를 입력하세요");
            System.out.print("상품명: ");
            orders[i].productName = scan.nextLine();
            System.out.print("가격: ");
            orders[i].price = scan.nextInt();
            System.out.print("수량: ");
            orders[i].quantity = scan.nextInt();
            scan.nextLine();
            System.out.println();
        }
    }

    static void orderPrint(ProductOrder[] orders) {
        int total = 0;
        for(ProductOrder P : orders) {
            System.out.println("상품명: " + P.productName + ", 가격: " + P.price + ", 수량: " + P.quantity);
            total += (P.price * P.quantity);
        }
        System.out.println("총 결제금액: " + total);
    }

}

답변 1

1

안녕하세요. jonghyeok097님, 공식 서포터즈 OMG입니다.

  1. 네. 올리신 코드처럼 메서드로 선언하여 읽기 쉬운코드를 작성하는 것은 좋은 방향입니다.

  2.  

    1. orderCount()에 상품 등록 시스템은 출력문으로써 orderCount()안에 넣기보다는 printBanner()로 별도로 만들면 좋을 것 같아요.

       

    2. orderCount()의 주 기능이 주문 수량을 입력받는 역할을 한다면 inputOrderCount가 명시적인 네이밍 일 것 같아요. 혹은 입력 후 값을 반환하니 getOrderCount도 더 나은 선택일 것 같습니다.

    3. 메서드의 이름은 orderPrint가 아닌 printOrder와 같이 동사로 시작하거나 동사로 명명하는 것이 메서드의 행위를 파악하는 데에 용이합니다.

좋은 코드를 작성하기 위해 노력하시는 모습이 보기 좋네요 ^^

추가로 마틴 파울러의 '클린코드' 책과 인프런에 있는 좋은 클린코드 관련 강의들을 수강하시면 궁금증이 많이 해소 되실거라 생각합니다 😀

감사합니다.

jonghyeok097님의 프로필 이미지
jonghyeok097
질문자

답변 감사합니다!

추천해주신 클린코드 책도 꼭 한번 읽어보겠습니다!

jonghyeok097님의 프로필 이미지
jonghyeok097

작성한 질문수

질문하기