inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

문제와 풀이

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

해결된 질문

155

jonghyeok097

작성한 질문수 2

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);
    }

}

java 객체지향

답변 1

1

OMG

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

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

  2.  

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

       

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

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

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

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

감사합니다.

1

jonghyeok097

답변 감사합니다!

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

질문있습니다

0

27

1

1번 문제 질문입니다.

0

32

1

음악플레이어 문제 중 코드질문

0

26

1

9장 상속 문제와 풀이 질문

0

38

1

강의 자료에 사소한 오타가 있습니다.

0

49

2

매서드 참조값 반환??

0

66

1

접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드

0

70

1

자바 기본편 - .(dot)에 관한 질문입니다!

0

85

1

공부방법

0

74

2

상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?

0

82

1

static method 질문

0

66

1

캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요

0

97

1

Method1에서 Student 객체

0

73

1

3강 18. null 질문

0

68

1

this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?

0

75

1

팩토리 메서드 패턴과 일반 생성자 사용의 장단점

0

97

1

문의

0

104

1

9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다

0

90

1

상속과 그에 따른 메모리 구조 질문

0

62

1

call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다

0

74

1

수강기한

0

136

1

기본편 객체지향 프로그래밍에 대한 정의

0

86

1

섹션10 상속 메모리 구조 및 문제 관련 질문

0

87

1

추가 지식 학습

0

152

2